/ Hex Artifact Content
Login

Artifact dc193eb8a9922528a370eae11e2e66886e0f29a3:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
19a0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
19b0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
19c0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
19d0: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
19e0: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
19f0: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
1a00: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
1a10: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a20: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
1a30: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
1a40: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
1a50: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
1a60: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
1a70: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
1a80: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
1a90: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
1aa0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
1ab0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
1ac0: 65 72 20 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  er S..*/.#if def
1ad0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1ae0: 5f 48 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  _H).# define SQL
1af0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
1b00: 29 20 5c 0a 20 20 20 20 28 28 75 69 6e 74 70 74  ) \.    ((uintpt
1b10: 72 5f 74 29 28 50 29 3e 3d 28 75 69 6e 74 70 74  r_t)(P)>=(uintpt
1b20: 72 5f 74 29 28 53 29 20 26 26 20 28 75 69 6e 74  r_t)(S) && (uint
1b30: 70 74 72 5f 74 29 28 50 29 3c 28 75 69 6e 74 70  ptr_t)(P)<(uintp
1b40: 74 72 5f 74 29 28 45 29 29 0a 23 65 6c 73 65 0a  tr_t)(E)).#else.
1b50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1b60: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
1b70: 50 29 3e 3d 28 53 29 20 26 26 20 28 50 29 3c 28  P)>=(S) && (P)<(
1b80: 45 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E)).#endif../*.*
1b90: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
1ba0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
1bb0: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
1bc0: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
1bd0: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
1be0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
1bf0: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
1c00: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
1c10: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
1c20: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
1c30: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1c40: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1c50: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
1c60: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1c70: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
1c80: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
1c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1ca0: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
1cb0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
1cc0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
1cd0: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
1ce0: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
1cf0: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
1d00: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
1d10: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
1d20: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
1d30: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
1d40: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1d50: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
1d60: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1d70: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
1d80: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
1d90: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
1da0: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
1db0: 31 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1300.#    if !de
1dc0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
1dd0: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
1de0: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
1df0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1e00: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
1e10: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
1e20: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
1e30: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
1e40: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
1e50: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
1e60: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
1e70: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
1e80: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
1e90: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
1ea0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
1eb0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
1ec0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
1ed0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1ee0: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
1ef0: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
1f00: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
1f10: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
1f20: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
1f30: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
1f40: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
1f50: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
1f60: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
1f70: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
1f80: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
1f90: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
1fa0: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
1fb0: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
1fc0: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
1fd0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
1fe0: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
1ff0: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2000: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2010: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2020: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
2030: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
2040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2050: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2060: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2070: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2080: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2090: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
20a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
20b0: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
20c0: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
20d0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
20e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
20f0: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2100: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2110: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
2120: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
2130: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
2140: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2150: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
2160: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2170: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2180: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2190: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
21a0: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
21b0: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
21c0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
21d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
21e0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
21f0: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2200: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
2210: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
2220: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
2230: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
2240: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
2250: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
2260: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2270: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2280: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2290: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
22a0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
22b0: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
22c0: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
22d0: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
22e0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
22f0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2300: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2310: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
2320: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
2330: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2340: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
2350: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
2360: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2370: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2380: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2390: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
23a0: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
23b0: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
23c0: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
23d0: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
23e0: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
23f0: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2400: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
2410: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
2420: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
2430: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
2440: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
2450: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
2460: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2470: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2480: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2490: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
24a0: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
24b0: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
24c0: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
24d0: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
24e0: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
24f0: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2500: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
2510: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
2520: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
2530: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
2540: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
2550: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
2560: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2570: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2580: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2590: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
25a0: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
25b0: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
25c0: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
25d0: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
25e0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
25f0: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2600: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2610: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2620: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2630: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2640: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2650: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2660: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2670: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2680: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2690: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
26a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
26b0: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
26c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26d0: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
26e0: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
26f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2700: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2710: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2720: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2730: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2740: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2750: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2760: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2770: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2790: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
27a0: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
27b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
27c0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
27d0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
27e0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
27f0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2800: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2810: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2820: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2830: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2840: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2850: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2860: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2870: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2880: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2890: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
28a0: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
28b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
28c0: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
28d0: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
28e0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28f0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2900: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2910: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2920: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2940: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2950: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2960: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2970: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2980: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2990: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
29a0: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
29b0: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
29c0: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
29d0: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
29e0: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
29f0: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2a00: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2a10: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2a20: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2a30: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2a40: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2a50: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2a60: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2a70: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2a80: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2a90: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2aa0: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2ab0: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2ac0: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2ad0: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2af0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2b00: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2b10: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2b20: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2b30: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2b40: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2b50: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2b60: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
2b70: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
2b80: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
2b90: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2ba0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
2bb0: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
2bc0: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
2bd0: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
2be0: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
2bf0: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
2c00: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
2c10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
2c20: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
2c30: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
2c40: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
2c50: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
2c60: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
2c70: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
2c80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c90: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2ca0: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
2cb0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2cc0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
2cd0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2ce0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
2cf0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2d00: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
2d10: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2d20: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
2d30: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
2d40: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
2d50: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d60: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d70: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
2d80: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2d90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
2da0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2db0: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
2dc0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
2dd0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
2de0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
2df0: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
2e00: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
2e10: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2e20: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2e30: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2e40: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2e50: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2e60: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2e70: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2e80: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2e90: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2ea0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2eb0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2ec0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2ed0: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2ee0: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2ef0: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2f00: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2f10: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2f20: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2f30: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2f40: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2f50: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2f60: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2f70: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2f80: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2f90: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2fa0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2fb0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2fc0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2fd0: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2fe0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2ff0: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3000: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
3010: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
3020: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
3030: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
3040: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
3050: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
3060: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3070: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3080: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3090: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
30a0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
30b0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
30c0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
30d0: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
30e0: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
30f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3100: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
3110: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
3120: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
3130: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
3140: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
3150: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
3160: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3170: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3180: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3190: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
31a0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
31b0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
31c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
31d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
31e0: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
31f0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3200: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
3210: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
3220: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
3230: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
3240: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
3250: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
3260: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3270: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3280: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3290: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
32a0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
32b0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
32c0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
32d0: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
32e0: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
32f0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3300: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
3310: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
3320: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
3330: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
3340: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
3350: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
3360: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3370: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3380: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3390: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
33a0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
33b0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
33c0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
33d0: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
33e0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
33f0: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3400: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
3410: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
3420: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3430: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
3440: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
3450: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
3460: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3470: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3480: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3490: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
34a0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
34b0: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
34c0: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
34d0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
34e0: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
34f0: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3500: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3510: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3520: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3530: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
3540: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
3550: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
3560: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3570: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3580: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3590: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
35a0: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
35b0: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
35c0: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
35d0: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
35e0: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
35f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3600: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3610: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3620: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3630: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3640: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3650: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3660: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3670: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3680: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3690: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
36a0: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
36b0: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
36c0: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
36d0: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
36e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
36f0: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3700: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3710: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3720: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3730: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
3740: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
3750: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3760: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
3770: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
3780: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3790: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
37a0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
37b0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
37c0: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
37d0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
37e0: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
37f0: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
3800: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
3810: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
3820: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3830: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
3840: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
3850: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
3860: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
3870: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
3880: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
3890: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
38a0: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
38b0: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
38c0: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
38d0: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
38e0: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
38f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
3900: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
3910: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
3920: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
3930: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
3940: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3950: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
3960: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3970: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
3980: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
3990: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
39a0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
39b0: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
39c0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
39d0: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
39e0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
39f0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3a00: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3a10: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3a20: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3a30: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
3a40: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
3a50: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
3a60: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
3a70: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
3a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a90: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
3aa0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3ab0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3ac0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3ad0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3ae0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3af0: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3b00: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3b10: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3b20: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3b30: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3b40: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3b50: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3b60: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3b70: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3b80: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
3b90: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
3ba0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
3bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
3bc0: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
3bd0: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
3be0: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3bf0: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3c00: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3c10: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3c20: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3c30: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3c40: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3c50: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3c60: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3c70: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3c80: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
3c90: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
3ca0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3cb0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3cc0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
3cd0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
3ce0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3cf0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3d00: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3d10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d20: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3d30: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3d40: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3d50: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3d60: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3d70: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3d80: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3d90: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
3da0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
3db0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
3dc0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
3dd0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
3de0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
3df0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3e00: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3e10: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3e20: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3e30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3e40: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3e50: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3e60: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3e70: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3e80: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3e90: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
3ea0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
3eb0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
3ec0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
3ed0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
3ee0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
3ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3f00: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3f10: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3f20: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3f30: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3f40: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3f50: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3f60: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3f70: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3f80: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3f90: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
3fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
3fb0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
3fc0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
3fd0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
3fe0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
3ff0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
4000: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
4010: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
4020: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
4030: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
4040: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
4050: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
4060: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4070: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4080: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4090: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
40a0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
40b0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
40c0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
40d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
40e0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
40f0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4100: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4110: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4120: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4130: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4140: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
4150: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
4160: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4180: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4190: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
41a0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
41b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
41c0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
41d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
41e0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
41f0: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4200: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4210: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4220: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4230: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4240: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
4250: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4260: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4270: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4280: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4290: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
42a0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
42b0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
42c0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
42d0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
42e0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
42f0: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4300: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
4310: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
4320: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
4330: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
4340: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4350: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
4360: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4370: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4380: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4390: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
43a0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
43b0: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
43c0: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
43d0: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
43e0: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
43f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4400: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
4410: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
4420: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
4430: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
4440: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
4450: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
4460: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4470: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4480: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
44a0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
44b0: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
44c0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
44d0: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
44e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
44f0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4500: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
4510: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
4520: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
4530: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
4540: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
4550: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
4560: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4570: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4580: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4590: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
45a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
45b0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
45c0: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
45d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
45e0: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
45f0: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
4600: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
4610: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
4620: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
4630: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
4640: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
4650: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
4660: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4670: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
4680: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
4690: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
46a0: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
46b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
46c0: 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62  f no value has b
46d0: 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72  een provided for
46e0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
46f0: 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69  ER_THREADS, or i
4700: 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50  f.** SQLITE_TEMP
4710: 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f  _STORE is set to
4720: 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65   3 (never use te
4730: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20  mporary files), 
4740: 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72  set it.** to zer
4750: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
4760: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
4770: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
4780: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
4790: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
47a0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
47b0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
47c0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
47d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
47e0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
47f0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4800: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4810: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
4820: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4830: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4840: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4850: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4860: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
4870: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
4880: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4890: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
48a0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
48b0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
48c0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
48d0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
48e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
48f0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
4900: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4910: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
4920: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
4930: 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61  t initial alloca
4940: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67  tion for the pag
4950: 65 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e  ecache when usin
4960: 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61  g separate.** pa
4970: 67 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63  gecaches for eac
4980: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
4990: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69  ction.  A positi
49a0: 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ve number is the
49b0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  .** number of pa
49c0: 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ges.  A negative
49d0: 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c   number N transl
49e0: 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61  ations means tha
49f0: 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66  t a buffer.** of
4a00: 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69   -1024*N bytes i
4a10: 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  s allocated and 
4a20: 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79  used for as many
4a30: 20 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c   pages as it wil
4a40: 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64  l hold..*/.#ifnd
4a50: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4a60: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
4a70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4a80: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
4a90: 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66  NITSZ 100.#endif
4aa0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
4ab0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
4ac0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
4ad0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
4ae0: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
4af0: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
4b00: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
4b10: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
4b20: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
4b30: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
4b40: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
4b50: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
4b60: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
4b70: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
4b80: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
4b90: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
4ba0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
4bb0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
4bc0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
4bd0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
4be0: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
4bf0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
4c00: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
4c10: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
4c20: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
4c30: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
4c40: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
4c50: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
4c60: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
4c70: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
4c80: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
4c90: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
4ca0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
4cb0: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
4cc0: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
4cd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
4ce0: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
4cf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
4d00: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
4d10: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
4d20: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
4d30: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
4d40: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
4d50: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
4d60: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
4d70: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
4d80: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
4d90: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
4da0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
4db0: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
4dc0: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
4dd0: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
4de0: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
4df0: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
4e00: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
4e10: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
4e20: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
4e30: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4e40: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
4e50: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
4e60: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
4e70: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4e80: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
4e90: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
4ea0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
4eb0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4ec0: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
4ed0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
4ee0: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
4ef0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4f00: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
4f10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4f20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4f30: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
4f40: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
4f50: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
4f60: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
4f70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
4f80: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
4f90: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4fa0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
4fb0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4fc0: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
4fd0: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
4fe0: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
4ff0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5000: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5010: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5020: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5030: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5040: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5050: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5060: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5070: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5080: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5090: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
50a0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
50b0: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
50c0: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
50d0: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
50e0: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
50f0: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5100: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5110: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5120: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5130: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5140: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5150: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5160: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5170: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5180: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5190: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
51a0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
51b0: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
51c0: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
51d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
51e0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
51f0: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5200: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5210: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5220: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5230: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5240: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5250: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5260: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5270: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5280: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5290: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
52a0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
52b0: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
52c0: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
52d0: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
52e0: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
52f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5300: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5310: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5320: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5330: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5340: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5350: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5360: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5370: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5380: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5390: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
53a0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
53b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
53c0: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
53d0: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
53e0: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
53f0: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5400: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5410: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5420: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5430: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5440: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5450: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5460: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5470: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5480: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5490: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
54a0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
54b0: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
54c0: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
54d0: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
54e0: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
54f0: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
5500: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
5510: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
5520: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
5530: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
5540: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
5550: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
5560: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
5570: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
5580: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
5590: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
55a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
55b0: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
55c0: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
55d0: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
55e0: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
55f0: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
5600: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
5610: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
5620: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
5630: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
5640: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
5650: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
5660: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
5670: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
5680: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
5690: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
56a0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
56b0: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
56c0: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
56d0: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
56e0: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
56f0: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
5700: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
5710: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
5720: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
5730: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
5740: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
5750: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
5760: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
5770: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
5780: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
5790: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
57a0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
57b0: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
57c0: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
57d0: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
57e0: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
57f0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
5800: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
5810: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
5820: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
5830: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
5840: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
5850: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
5860: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
5870: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
5880: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
5890: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
58a0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
58b0: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
58c0: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
58d0: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
58e0: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
58f0: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
5900: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
5910: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
5920: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
5930: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
5940: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
5950: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
5960: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
5970: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
5980: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
5990: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
59a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
59b0: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
59c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
59d0: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
59e0: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
59f0: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
5a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5a10: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
5a20: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
5a30: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
5a40: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
5a50: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
5a60: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
5a70: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
5a80: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
5a90: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
5aa0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
5ab0: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
5ac0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
5ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5ae0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
5af0: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
5b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5b10: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
5b20: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
5b30: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
5b40: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
5b50: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
5b60: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
5b70: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
5b80: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
5b90: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
5ba0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
5bb0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
5bc0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
5bd0: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
5be0: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
5bf0: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
5c00: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
5c10: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
5c20: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5c30: 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65  YTEORDER=1 is se
5c40: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
5c50: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
5c60: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
5c70: 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64  .*/.#if (defined
5c80: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5c90: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5ca0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5cb0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5cc0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36     defined(__x86
5cd0: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
5ce0: 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64  __x86_64__) || d
5cf0: 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20  efined(_M_X64)  
5d00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5d10: 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c  ined(_M_AMD64) |
5d20: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d  | defined(_M_ARM
5d30: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5d40: 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20  (__x86)   ||    
5d50: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5d60: 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66  _arm__)) && !def
5d70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5d80: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
5d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5da0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
5db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5dc0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
5dd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5de0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
5df0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5e00: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5e10: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69  TE_UTF16LE.#endi
5e20: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 73  f.#if (defined(s
5e30: 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69  parc)    || defi
5e40: 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c  ned(__ppc__))  \
5e50: 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65 64  .    && !defined
5e60: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
5e70: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5e80: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5e90: 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 64  RDER    4321.# d
5ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
5eb0: 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65  ENDIAN    1.# de
5ec0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5ed0: 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66  LEENDIAN 0.# def
5ee0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5ef0: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
5f00: 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69  TF16BE.#endif.#i
5f10: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5f20: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69  E_BYTEORDER).# i
5f30: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5f40: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
5f50: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
5f60: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
5f70: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
5f80: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
5f90: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
5fa0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5fb0: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5fc0: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5fd0: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5ff0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
6000: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6010: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
6020: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
6030: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
6040: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
6050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6060: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
6070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
6080: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
6090: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
60a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
60b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
60c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
60d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
60e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
60f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
6100: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
6110: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
6120: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
6130: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
6140: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
6150: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
6160: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
6170: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
6180: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
6190: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
61a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
61b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
61c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
61d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
61e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
61f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
6200: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
6210: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
6220: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
6230: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
6240: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
6250: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
6260: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
6270: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
6280: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
6290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
62a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
62b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
62c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
62d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
62e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
62f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
6300: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
6310: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
6320: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
6330: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
6340: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
6350: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
6360: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
6370: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
6380: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
6390: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
63a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
63b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
63c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
63d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
63e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
63f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
6400: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
6410: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
6420: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
6430: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
6440: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
6450: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
6460: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
6470: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
6480: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
6490: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
64a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
64b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
64c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
64d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
64e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
64f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
6500: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
6510: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
6520: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
6530: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
6540: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
6550: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
6560: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6570: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6580: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6590: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
65a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
65b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
65c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
65d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
65e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
65f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
6600: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
6610: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
6620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6630: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6640: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
6650: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
6660: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
6670: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
6680: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
6690: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
66a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
66b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
66c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
66d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
66e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
66f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6700: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
6710: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
6720: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
6730: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6740: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6750: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  E 0.# endif.# de
6760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6770: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f  MMAP_SIZE_xc 1 /
6780: 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * exclude from c
6790: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
67a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
67b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
67c0: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
67d0: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
67e0: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
67f0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6800: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
6810: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
6820: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
6830: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
6840: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
6850: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
6860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
6870: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6880: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6890: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
68a0: 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  ZE 0.# define SQ
68b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
68c0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20  P_SIZE_xc 1  /* 
68d0: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
68e0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  me.c */.#endif.#
68f0: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
6900: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
6910: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6920: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6930: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6940: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6960: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
6970: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
6980: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
6990: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
69a0: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
69b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
69c0: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
69d0: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
69e0: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
69f0: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
6a00: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
6a10: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
6a20: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a30: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
6a40: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6a50: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
6a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
6a70: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6a80: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a90: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6aa0: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6ab0: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
6ac0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
6ad0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6ae0: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
6af0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6b00: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
6b10: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6b20: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
6b30: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
6b40: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
6b50: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
6b60: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
6b70: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
6b80: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
6b90: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
6ba0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
6bb0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
6bc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
6bd0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
6be0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
6bf0: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
6c00: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6c10: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
6c20: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6c30: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
6c40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
6c50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6c60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6c70: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
6c80: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
6c90: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
6ca0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
6cb0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
6cc0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
6cd0: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
6ce0: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
6cf0: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
6d00: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
6d10: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
6d20: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
6d30: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
6d40: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
6d50: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
6d60: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
6d70: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
6d80: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
6d90: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6da0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
6db0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
6dc0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
6dd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6de0: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
6df0: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
6e00: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
6e10: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
6e20: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
6e30: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
6e40: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
6e50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
6e60: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
6e70: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
6e80: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
6eb0: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
6ec0: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
6ed0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
6ee0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6ef0: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
6f00: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
6f10: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
6f20: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
6f30: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
6f40: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
6f50: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
6f60: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
6f70: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
6f80: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
6f90: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
6fa0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6fb0: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
6fc0: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
6fd0: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
6fe0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6ff0: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7000: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7010: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7020: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7030: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7040: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7050: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7060: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7070: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7080: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
7090: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
70a0: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
70b0: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
70c0: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
70d0: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
70e0: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
70f0: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7100: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7110: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7120: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7130: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
7140: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
7150: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
7160: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
7170: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
7180: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7190: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
71a0: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
71b0: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
71c0: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
71d0: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
71e0: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
71f0: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7200: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7210: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7220: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7230: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
7240: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
7250: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
7260: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
7270: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
7280: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
7290: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
72a0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
72b0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
72c0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
72d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
72e0: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
72f0: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
7300: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
7310: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
7320: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
7330: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
7340: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
7350: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
7360: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
7370: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
7380: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
7390: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
73a0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
73b0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
73c0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
73d0: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
73e0: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
73f0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
7400: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
7410: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
7420: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
7430: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
7440: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
7450: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
7460: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
7470: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
7480: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
7490: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
74a0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
74b0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
74c0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
74d0: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
74e0: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
74f0: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
7500: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
7510: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
7520: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
7530: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
7540: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
7550: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
7560: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
7570: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
7580: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
7590: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
75a0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
75b0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
75c0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
75d0: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
75e0: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
75f0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
7600: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
7610: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
7620: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
7630: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
7640: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
7650: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
7660: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
7670: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
7680: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
7690: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
76a0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
76b0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
76c0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
76d0: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
76e0: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
76f0: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
7700: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
7710: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
7720: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
7730: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
7740: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7750: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
7760: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
7770: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
7780: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
7790: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
77a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
77b0: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
77c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
77d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
77e0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
77f0: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
7800: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
7810: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
7820: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
7830: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
7840: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7850: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
7860: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
7870: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
7880: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
7890: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
78a0: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
78b0: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
78c0: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
78d0: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
78e0: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
78f0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
7900: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
7910: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
7920: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
7930: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
7940: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
7950: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
7960: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
7970: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
7980: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
7990: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
79b0: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
79c0: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
79d0: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
79e0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
79f0: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
7a00: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
7a10: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
7a20: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
7a30: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
7a40: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
7a50: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
7a60: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
7a70: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
7a80: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
7a90: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
7aa0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ab0: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
7ac0: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
7ad0: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
7ae0: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
7af0: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
7b00: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
7b10: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
7b20: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
7b30: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
7b40: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
7b50: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
7b60: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
7b70: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
7b80: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
7b90: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
7ba0: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
7bb0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
7bc0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7bd0: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
7be0: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
7bf0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
7c00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
7c10: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
7c20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
7c30: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
7c40: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7c50: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
7c60: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
7c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
7c80: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
7c90: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
7ca0: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
7cb0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
7cc0: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
7cd0: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
7ce0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7cf0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
7d00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
7d10: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
7d20: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
7d30: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
7d40: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
7d50: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
7d60: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
7d70: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
7d80: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
7d90: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
7da0: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
7db0: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
7dc0: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
7dd0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
7de0: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
7df0: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
7e00: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
7e10: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
7e20: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
7e30: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
7e40: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
7e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
7e60: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
7e70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e80: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
7e90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ea0: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
7eb0: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
7ec0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
7ed0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
7ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ef0: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
7f00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
7f10: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
7f20: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7f30: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
7f40: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7f50: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
7f60: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
7f70: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
7f80: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
7f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7fa0: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
7fb0: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
7fc0: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
7fd0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7fe0: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
7ff0: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8000: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8010: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8020: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8030: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8050: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
8060: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
8070: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
8080: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8090: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
80a0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
80b0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
80c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80d0: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
80e0: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
80f0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8100: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8110: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8120: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8130: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8140: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8160: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
8170: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
8180: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
8190: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
81a0: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
81b0: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
81c0: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
81d0: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
81e0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
81f0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8210: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
8220: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
8230: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
8240: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
8250: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
8260: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
8270: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
8280: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
8290: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
82a0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
82b0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
82c0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
82d0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
82e0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
82f0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
8300: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
8310: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
8320: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
8330: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
8340: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
8350: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
8360: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
8370: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
8380: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
8390: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
83a0: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
83b0: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
83c0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
83d0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
83e0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
83f0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
8400: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
8410: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
8420: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8430: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
8440: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
8450: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
8460: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
8470: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
8480: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
8490: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
84a0: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
84b0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
84c0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
84d0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
84e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
84f0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
8500: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
8510: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
8520: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
8530: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
8540: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
8550: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
8560: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
8570: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
85a0: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
85d0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
8600: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
8610: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
8620: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
8630: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
8640: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
8650: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
8660: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
8670: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
8680: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
8690: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
86a0: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
86b0: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
86c0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
86d0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
86e0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
86f0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
8700: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 28 50  T_SYNCHRONOUS (P
8710: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
8720: 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e 64 69 66 0a  _FULL-1).#endif.
8730: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
8740: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
8750: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
8760: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
8770: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
8780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
8790: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
87a0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
87b0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
87c0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
87d0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
87e0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
87f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8800: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
8810: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
8820: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
8830: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
8840: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
8850: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
8860: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
8870: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
8880: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
8890: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
88a0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
88b0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
88c0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
88d0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
88e0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
88f0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
8900: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
8910: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
8920: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
8930: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
8940: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
8950: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
8960: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
8970: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
8980: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
8990: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
89a0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75  a to disk */.  u
89b0: 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20  8 bSyncSet;     
89c0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
89d0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
89e0: 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72  us=N" has been r
89f0: 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  un */.  Schema *
8a00: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
8a10: 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62  Pointer to datab
8a20: 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73  ase schema (poss
8a30: 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a  ibly shared) */.
8a40: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
8a50: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
8a60: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
8a70: 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61   stores a databa
8a80: 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
8a90: 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a   Most Schema obj
8aa0: 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61  ects are associa
8ab0: 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65  ted with a Btree
8ac0: 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  .  The exception
8ad0: 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d   is.** the Schem
8ae0: 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64  a for the TEMP d
8af0: 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33  atabaes (sqlite3
8b00: 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69  .aDb[1]) which i
8b10: 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e  s free-standing.
8b20: 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61  .** In shared ca
8b30: 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67  che mode, a sing
8b40: 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  le Schema object
8b50: 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62   can be shared b
8b60: 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74  y multiple.** Bt
8b70: 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20  rees that refer 
8b80: 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65  to the same unde
8b90: 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20  rlying BtShared 
8ba0: 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63  object..**.** Sc
8bb0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
8bc0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
8bd0: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
8be0: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
8bf0: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
8c00: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
8c10: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
8c20: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
8c30: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
8c40: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
8c50: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
8c60: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
8c70: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
8c80: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
8c90: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
8ca0: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
8cb0: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
8cc0: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
8cd0: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
8ce0: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
8cf0: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
8d00: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
8d10: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
8d20: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
8d30: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
8d40: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
8d50: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
8d60: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
8d70: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
8d80: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
8d90: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
8da0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
8db0: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
8dc0: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
8dd0: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
8de0: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
8df0: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
8e00: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
8e10: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
8e20: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
8e30: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
8e40: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8e50: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
8e60: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
8e70: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
8e80: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
8e90: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
8ea0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
8eb0: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
8ec0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
8ed0: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
8ee0: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
8ef0: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
8f00: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
8f10: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
8f20: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
8f30: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
8f40: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
8f50: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
8f60: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
8f70: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
8f80: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
8f90: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
8fa0: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
8fb0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
8fc0: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
8fd0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
8fe0: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
8ff0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
9000: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9010: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
9020: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
9030: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9040: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
9050: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
9060: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
9070: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
9080: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
9090: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
90a0: 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  the.** Db.pSchem
90b0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
90c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
90d0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
90e0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
90f0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
9100: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
9110: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
9120: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
9130: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
9140: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9150: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
9160: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
9170: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
9180: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
9190: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
91a0: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
91b0: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
91c0: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
91d0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
91e0: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
91f0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
9200: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
9210: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
9220: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
9230: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
9240: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
9250: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
9260: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
9270: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
9280: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
9290: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
92a0: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
92b0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
92c0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
92d0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
92e0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
92f0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
9300: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
9310: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
9320: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
9330: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
9340: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
9350: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
9360: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
9370: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
9380: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
9390: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
93a0: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
93b0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
93c0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
93d0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
93e0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
93f0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
9400: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
9410: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
9420: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
9430: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
9440: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
9450: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
9460: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
9470: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
9480: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
9490: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
94a0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
94b0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
94c0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
94d0: 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a  R_THREADS+1)../*
94e0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
94f0: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
9500: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
9510: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
9520: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
9530: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
9540: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
9550: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
9560: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
9570: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
9580: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
9590: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
95a0: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
95b0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
95c0: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
95d0: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
95e0: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
95f0: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
9600: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
9610: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
9620: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
9630: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
9640: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
9650: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
9660: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
9670: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
9680: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
9690: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
96a0: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
96b0: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
96c0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
96d0: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
96e0: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
96f0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
9700: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
9710: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
9720: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
9730: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
9740: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
9750: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
9760: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
9770: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
9780: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
9790: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
97a0: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
97b0: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
97c0: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
97d0: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
97e0: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
97f0: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
9800: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
9810: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
9820: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
9830: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
9840: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
9850: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
9860: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
9870: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
9880: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
9890: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
98a0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
98b0: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
98c0: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
98d0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
98e0: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
98f0: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32  ookaside {.  u32
9900: 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20   bDisable;      
9910: 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65       /* Only ope
9920: 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69  rate the lookasi
9930: 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a  de when zero */.
9940: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
9950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
9960: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
9970: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
9980: 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20  8 bMalloced;    
9990: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
99a0: 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65  f pStart obtaine
99b0: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
99c0: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74  alloc() */.  int
99d0: 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20   nOut;          
99e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
99f0: 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e  f buffers curren
9a00: 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
9a10: 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20  */.  int mxOut; 
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a30: 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66  Highwater mark f
9a40: 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74  or nOut */.  int
9a50: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
9a60: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
9a70: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
9a80: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
9a90: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
9aa0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
9ab0: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
9ac0: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
9ad0: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
9ae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9af0: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
9b00: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
9b10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
9b20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9b30: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
9b40: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
9b50: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
9b60: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
9b70: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
9b80: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
9b90: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
9ba0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
9bb0: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
9bc0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
9bd0: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
9be0: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
9bf0: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
9c00: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
9c10: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
9c20: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
9c30: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
9c40: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
9c50: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
9c60: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
9c70: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
9c80: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
9c90: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
9ca0: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
9cb0: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
9cc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
9cd0: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
9ce0: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
9cf0: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
9d00: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
9d10: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
9d20: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
9d30: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
9d40: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
9d50: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9d60: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
9d70: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
9d80: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
9d90: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
9da0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
9db0: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
9dc0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
9dd0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9de0: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9df0: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
9e00: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
9e10: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
9e20: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9e40: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
9e50: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
9e60: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e80: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
9e90: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
9ea0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
9eb0: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
9ec0: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
9ed0: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
9ee0: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
9ef0: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
9f00: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
9f10: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
9f20: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
9f30: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
9f40: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
9f50: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
9f60: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
9f70: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
9f80: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
9f90: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
9fa0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
9fb0: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
9fc0: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
9fd0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
9fe0: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
9ff0: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
a000: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
a010: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
a020: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
a030: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
a040: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
a050: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
a060: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
a070: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
a080: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
a090: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
a0a0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
a0b0: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
a0c0: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
a0d0: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
a0e0: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
a0f0: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
a100: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
a110: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
a120: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
a130: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
a140: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
a150: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
a160: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
a170: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a180: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a190: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
a1a0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
a1b0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
a1c0: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
a1d0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
a1e0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a1f0: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
a200: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
a210: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
a220: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a230: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
a240: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a260: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
a270: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
a280: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
a290: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
a2a0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
a2b0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
a2c0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a2d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
a300: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  endif.../*.** Ea
a310: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
a320: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
a330: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a340: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
a350: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
a360: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
a370: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
a380: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
a390: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
a3a0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
a3b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
a3c0: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
a3d0: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
a3e0: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
a3f0: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
a400: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
a410: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a420: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
a430: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
a440: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
a450: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
a460: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
a490: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
a4a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a4b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a4c0: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
a4d0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
a4e0: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a500: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
a510: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
a520: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
a530: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
a540: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
a550: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
a560: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
a570: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
a580: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a590: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
a5a0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
a5b0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
a5c0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
a5d0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
a5e0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
a5f0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
a600: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a620: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
a630: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
a640: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
a650: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
a660: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
a670: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
a680: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
a690: 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  ng */.  u16 dbOp
a6a0: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
a6b0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
a6c0: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
a6d0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
a6e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a700: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
a710: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
a720: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
a730: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
a740: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
a750: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
a760: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a770: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
a780: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
a790: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
a7a0: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
a7b0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
a7c0: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
a7d0: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
a7e0: 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c  .  u8 bBenignMal
a7f0: 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
a800: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69   /* Do not requi
a810: 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20  re OOMs if true 
a820: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
a830: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
a840: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
a850: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
a860: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
a870: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
a880: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
a890: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
a8a0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
a8b0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
a8c0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
a8d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
a8e0: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
a8f0: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
a900: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
a910: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
a920: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
a930: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
a940: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
a950: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
a960: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
a970: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
a980: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
a990: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
a9a0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
a9b0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
a9c0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
a9d0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
a9e0: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa00: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
aa10: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
aa20: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
aa30: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa50: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
aa60: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
aa70: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
aa80: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
aa90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
aaa0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
aab0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
aac0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
aad0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
aae0: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
aaf0: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
ab00: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
ab10: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
ab20: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
ab30: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
ab40: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
ab50: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
ab60: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
ab70: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
ab80: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
ab90: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
aba0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
abb0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
abc0: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
abd0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
abe0: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ac00: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
ac10: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
ac20: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
ac30: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
ac40: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
ac50: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
ac60: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
ac70: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
ac80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
ac90: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
aca0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
acb0: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  igger */.    u8 
acc0: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20  imposterTable;  
acd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c           /* Buil
ace0: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
acf0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e   table */.  } in
ad00: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
ad10: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
ad20: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ad30: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
ad40: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
ad50: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ad70: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
ad80: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
ad90: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
ada0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
adc0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
add0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
ade0: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
adf0: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ae10: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
ae20: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
ae30: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
ae40: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
ae50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ae60: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
ae70: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
ae80: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
ae90: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
aea0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
aeb0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
aec0: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
aed0: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
aee0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
aef0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
af00: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
af10: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
af20: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
af30: 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61  );        /* Tra
af40: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
af50: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
af60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
af70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
af80: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
af90: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
afa0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
afb0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
afc0: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
afd0: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
afe0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
aff0: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
b020: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
b030: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
b040: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
b050: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
b060: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
b070: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
b080: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
b090: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
b0a0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
b0b0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
b0c0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
b0d0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
b0e0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
b0f0: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
b100: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
b110: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
b120: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
b130: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
b140: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
b150: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
b160: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
b170: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
b180: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
b190: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
b1a0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e  ite_int64);.#ifn
b1b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b1c0: 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c  WAL.  int (*xWal
b1d0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a  Callback)(void *
b1e0: 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  , sqlite3 *, con
b1f0: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
b200: 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67  .  void *pWalArg
b210: 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28  ;.#endif.  void(
b220: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
b230: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
b240: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
b250: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a  char*);.  void(*
b260: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
b270: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
b280: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
b290: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
b2a0: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b  *pCollNeededArg;
b2b0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
b2c0: 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20   *pErr;         
b2d0: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
b2e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
b2f0: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
b300: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
b310: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
b320: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
b330: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
b340: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
b350: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
b360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
b370: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
b380: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
b390: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
b3a0: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
b3b0: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
b3c0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
b3d0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
b3e0: 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  ZATION.  sqlite3
b3f0: 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20  _xauth xAuth;   
b400: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73         /* Access
b410: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   authorization f
b420: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
b430: 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20  d *pAuthArg;    
b440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
b450: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
b460: 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75  e access auth fu
b470: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
b480: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b490: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
b4a0: 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78  LLBACK.  int (*x
b4b0: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a  Progress)(void *
b4c0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72  );     /* The pr
b4d0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
b4e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67  */.  void *pProg
b4f0: 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20  ressArg;        
b500: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
b510: 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  o the progress c
b520: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73  allback */.  uns
b530: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f  igned nProgressO
b540: 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ps;        /* Nu
b550: 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  mber of opcodes 
b560: 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c  for progress cal
b570: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a  lback */.#endif.
b580: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b590: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
b5a0: 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20  .  int nVTrans; 
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5c0: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69   /* Allocated si
b5d0: 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f  ze of aVTrans */
b5e0: 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b  .  Hash aModule;
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b600: 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79   /* populated by
b610: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
b620: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74  module() */.  Vt
b630: 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b  abCtx *pVtabCtx;
b640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
b650: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
b660: 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63  e vtab connect/c
b670: 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c  reate */.  VTabl
b680: 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20  e **aVTrans;    
b690: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74           /* Virt
b6a0: 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  ual tables with 
b6b0: 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
b6c0: 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
b6d0: 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f  Disconnect;    /
b6e0: 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  * Disconnect the
b6f0: 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74  se in next sqlit
b700: 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a  e3_prepare() */.
b710: 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46  #endif.  Hash aF
b720: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
b730: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
b740: 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69  able of connecti
b750: 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  on functions */.
b760: 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b    Hash aCollSeq;
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b780: 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67  /* All collating
b790: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
b7a0: 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79  BusyHandler busy
b7b0: 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a  Handler;      /*
b7c0: 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   Busy callback *
b7d0: 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63  /.  Db aDbStatic
b7e0: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [2];            
b7f0: 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63    /* Static spac
b800: 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61  e for the 2 defa
b810: 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  ult backends */.
b820: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
b830: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
b840: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
b850: 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  e savepoints */.
b860: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
b870: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b880: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
b890: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
b8a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70   */.  int nSavep
b8b0: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
b8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
b8d0: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
b8e0: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
b8f0: 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b   int nStatement;
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b910: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
b920: 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  ed statement-tra
b930: 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20  nsactions  */.  
b940: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
b950: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b960: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f   Net deferred co
b970: 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74  nstraints this t
b980: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20  ransaction. */. 
b990: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
b9a0: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f  mCons;         /
b9b0: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69  * Net deferred i
b9c0: 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61  mmediate constra
b9d0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ints */.  int *p
b9e0: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
b9f0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
ba00: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
ba10: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
ba20: 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
ba30: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
ba40: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
ba50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
ba60: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
ba70: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
ba80: 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a  TATIC_MASTER.  *
ba90: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
baa0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
bab0: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
bac0: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
bad0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
bae0: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
baf0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
bb00: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
bb10: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
bb20: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
bb30: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
bb40: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
bb50: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
bb60: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
bb70: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
bb80: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
bb90: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
bba0: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
bbb0: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
bbc0: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
bbd0: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
bbe0: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
bbf0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
bc00: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
bc10: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
bc20: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
bc30: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
bc40: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
bc50: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
bc60: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
bc70: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
bc80: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
bc90: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcb0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
bcc0: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
bcd0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
bce0: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
bcf0: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
bd00: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
bd10: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
bd20: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
bd30: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
bd40: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
bd50: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
bd60: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
bd70: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
bd80: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
bd90: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
bda0: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
bdb0: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
bdc0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
bdd0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
bde0: 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 5f  f SQLITE_SCHEMA_
bdf0: 4c 49 4e 54 0a 20 20 76 6f 69 64 20 28 2a 78 57  LINT.  void (*xW
be00: 68 65 72 65 49 6e 66 6f 29 28 76 6f 69 64 2a 2c  hereInfo)(void*,
be10: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
be20: 2a 2c 20 69 6e 74 2c 20 69 36 34 29 3b 0a 20 20  *, int, i64);.  
be30: 76 6f 69 64 20 2a 70 57 68 65 72 65 49 6e 66 6f  void *pWhereInfo
be40: 43 74 78 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  Ctx;.#endif.};..
be50: 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f  /*.** A macro to
be60: 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e   discover the en
be70: 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61  coding of a data
be80: 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  base..*/.#define
be90: 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20   SCHEMA_ENC(db) 
bea0: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
beb0: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66  chema->enc).#def
bec0: 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20 20  ine ENC(db)     
bed0: 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a     ((db)->enc)..
bee0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
bef0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
bf00: 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a  lite3.flags..*/.
bf10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
bf20: 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78  dbeTrace      0x
bf30: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75  00000001  /* Tru
bf40: 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20  e to trace VDBE 
bf50: 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65  execution */.#de
bf60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65  fine SQLITE_Inte
bf70: 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30  rnChanges  0x000
bf80: 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d  00002  /* Uncomm
bf90: 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65  itted Hash table
bfa0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
bfb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
bfc0: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
bfd0: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
bfe0: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
bff0: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
c000: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
c010: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
c020: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
c030: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
c040: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
c050: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
c060: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
c070: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
c080: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
c090: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
c0a0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
c0b0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
c0c0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
c0d0: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
c0e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c0f0: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
c100: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
c110: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
c120: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
c130: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
c140: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
c150: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
c160: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
c170: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1a0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
c1b0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
c1c0: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1f0: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
c200: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
c210: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
c220: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
c230: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
c240: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
c250: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
c260: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c290: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
c2a0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
c2b0: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
c2c0: 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30  ce       0x00000
c2d0: 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72  200  /* Debug pr
c2e0: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
c2f0: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
c300: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
c310: 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34  ting    0x000004
c320: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  00  /* Debug lis
c330: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
c340: 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e  ograms */.#defin
c350: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
c360: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38  hema    0x000008
c370: 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  00  /* OK to upd
c380: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
c390: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
c3a0: 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61  ITE_VdbeAddopTra
c3b0: 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f  ce 0x00001000  /
c3c0: 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56  * Trace sqlite3V
c3d0: 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73  dbeAddOp() calls
c3e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c3f0: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
c400: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
c410: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
c420: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
c430: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c440: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
c450: 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f  ted 0x0004000  /
c460: 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63  * For shared-cac
c470: 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69  he mode */.#defi
c480: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
c490: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38  FileFmt  0x00008
c4a0: 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  000  /* Create n
c4b0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
c4c0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
c4d0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76  ine SQLITE_Recov
c4e0: 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31  eryMode   0x0001
c4f0: 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20  0000  /* Ignore 
c500: 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f  schema errors */
c510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c520: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
c530: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65  x00020000  /* Re
c540: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
c550: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
c560: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
c570: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30  ggers    0x00040
c580: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
c590: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
c5a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c5b0: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
c5c0: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
c5d0: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
c5e0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
c5f0: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
c600: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
c610: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
c620: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
c630: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
c640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
c650: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
c660: 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66  0200000  /* Pref
c670: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
c680: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
c690: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
c6a0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30  xtension  0x0040
c6b0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
c6c0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
c6d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c6e0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
c6f0: 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54  0x00800000  /* T
c700: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
c710: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
c720: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
c730: 73 20 20 20 20 20 20 20 30 78 30 31 30 30 30 30  s       0x010000
c740: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
c750: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
c760: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c770: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
c780: 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20   0x02000000  /* 
c790: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
c7a0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
c7b0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45  ine SQLITE_VdbeE
c7c0: 51 50 20 20 20 20 20 20 20 20 30 78 30 34 30 30  QP        0x0400
c7d0: 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45  0000  /* Debug E
c7e0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
c7f0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
c800: 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20  ITE_Vacuum      
c810: 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f     0x08000000  /
c820: 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  * Currently in a
c830: 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69   VACUUM */.#defi
c840: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
c850: 7a 65 43 6b 20 20 20 20 20 30 78 31 30 30 30 30  zeCk     0x10000
c860: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
c870: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
c880: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
c890: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
c8a0: 65 6e 69 7a 65 72 20 20 30 78 32 30 30 30 30 30  enizer  0x200000
c8b0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
c8c0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
c8d0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20  */.../*.** Bits 
c8e0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
c8f0: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
c900: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
c910: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
c920: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
c930: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
c940: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
c950: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
c960: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
c970: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
c980: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
c990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
c9a0: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
c9b0: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
c9c0: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
c9d0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
c9e0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
c9f0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
ca00: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
ca10: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
ca20: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
ca30: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
ca40: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
ca50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
ca60: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
ca70: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
ca80: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20  actoring */./*  
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f                no
caa0: 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30  t used    0x0010
cab0: 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54     // Was: SQLIT
cac0: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a  E_IdxRealAsInt *
cad0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cae0: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
caf0: 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54  0x0020   /* DIST
cb00: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
cb10: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cb20: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
cb30: 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20  n   0x0040   /* 
cb40: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
cb50: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
cb60: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
cb70: 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f  xJoin 0x0080   /
cb80: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
cb90: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
cba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cbb0: 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30  SubqCoroutine  0
cbc0: 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75  x0100   /* Evalu
cbd0: 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61  ate subqueries a
cbe0: 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a  s coroutines */.
cbf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
cc00: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
cc10: 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0200   /* Transi
cc20: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
cc30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cc40: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
cc50: 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d    0x0400   /* Om
cc60: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
cc70: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
cc80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
cc90: 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30  34         0x080
cca0: 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33  0   /* Use STAT3
ccb0: 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a   or STAT4 data *
ccc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ccd0: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
cce0: 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64 64 20  0x2000   /* Add 
ccf0: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
cd00: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
cd10: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
cd20: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
cd30: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
cd40: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
cd50: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
cd60: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
cd70: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
cd80: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
cd90: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  sabled..*/.#ifnd
cda0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
cdb0: 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66  UILTIN_TEST.#def
cdc0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
cdd0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
cde0: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
cdf0: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
ce00: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
ce10: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
ce20: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
ce30: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
ce40: 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ask))==0).#else.
ce50: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
ce60: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
ce70: 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e   mask)  0.#defin
ce80: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
ce90: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
cea0: 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    1.#endif../*.*
ceb0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
cec0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
ced0: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
cee0: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
cef0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
cf00: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
cf10: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
cf20: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
cf30: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
cf40: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
cf50: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
cf60: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
cf70: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
cf80: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
cf90: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
cfa0: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
cfb0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
cfc0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
cfd0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
cfe0: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
cff0: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
d000: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
d010: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
d020: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
d030: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
d040: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
d050: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
d060: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
d070: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
d080: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
d090: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
d0a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
d0b0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
d0c0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
d0d0: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
d0e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d0f0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
d100: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
d110: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
d120: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
d130: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
d140: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
d150: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
d160: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
d170: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
d180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
d190: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
d1a0: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
d1b0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
d1c0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
d1d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
d1e0: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
d1f0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
d200: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d210: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
d220: 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c   For global buil
d230: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28  t-in functions (
d240: 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61  ex: substr(), ma
d250: 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a  x(), count()).**
d260: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
d270: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
d280: 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69  held in the sqli
d290: 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
d2a0: 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46  ons object..** F
d2b0: 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  or per-connectio
d2c0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  n application-de
d2d0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c  fined functions,
d2e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
d2f0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
d300: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64  is held in the d
d310: 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61  b->aHash hash ta
d320: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ble..**.** The u
d330: 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20  .pHash field is 
d340: 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62  used by the glob
d350: 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54  al built-ins.  T
d360: 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72  he u.pDestructor
d370: 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65  .** field is use
d380: 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74  d by per-connect
d390: 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63  ion app-def func
d3a0: 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tions..*/.struct
d3b0: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20   FuncDef {.  i8 
d3c0: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
d3d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
d3e0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
d3f0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
d400: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
d410: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
d420: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
d430: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
d440: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
d450: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
d460: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
d470: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
d480: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
d490: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
d4a0: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
d4b0: 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69  d (*xSFunc)(sqli
d4c0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
d4d0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
d4e0: 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67  ); /* func or ag
d4f0: 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  g-step */.  void
d500: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
d510: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a    /* Agg finaliz
d540: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  er */.  const ch
d550: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20  ar *zName;   /* 
d560: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
d570: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75  function. */.  u
d580: 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44  nion {.    FuncD
d590: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
d5a0: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
d5b0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
d5c0: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
d5d0: 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72  */.    FuncDestr
d5e0: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
d5f0: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
d600: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
d610: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
d620: 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a  /.  } u;.};../*.
d630: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
d640: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
d650: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
d660: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
d670: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
d680: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
d690: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
d6a0: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
d6b0: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
d6c0: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
d6d0: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
d6e0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
d6f0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
d700: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
d710: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
d720: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
d730: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
d740: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
d750: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
d760: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
d770: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
d780: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
d790: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
d7a0: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
d7b0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
d7c0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
d7d0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
d7e0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
d7f0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
d800: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
d810: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
d820: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
d830: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
d840: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
d850: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
d860: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
d870: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
d880: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
d890: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
d8a0: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
d8b0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
d8c0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
d8d0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
d8e0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
d8f0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
d900: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
d910: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
d920: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
d930: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
d940: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
d950: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
d960: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
d970: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
d980: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
d990: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
d9a0: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
d9b0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
d9c0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
d9d0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
d9e0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
d9f0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
da00: 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54  G.  And.** SQLIT
da10: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
da20: 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
da30: 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52   as SQLITE_DETER
da40: 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65  MINISTIC.  There
da50: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
da60: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
da70: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
da80: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
da90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
daa0: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
dab0: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
dac0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
dad0: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
dae0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
daf0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
db00: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
db10: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
db20: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
db30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
db40: 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
db50: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
db60: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
db70: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
db80: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
db90: 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
dba0: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
dbb0: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
dbc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
dbd0: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
dbe0: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
dbf0: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
dc00: 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
dc10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
dc20: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
dc30: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
dc40: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
dc50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dc60: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
dc70: 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
dc80: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
dc90: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
dca0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
dcb0: 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
dcc0: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
dcd0: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
dce0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
dcf0: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
dd00: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
dd10: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
dd20: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
dd30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
dd40: 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
dd50: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
dd60: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
dd70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
dd80: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
dd90: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
dda0: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
ddb0: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
ddc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ddd0: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
dde0: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
ddf0: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
de00: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
de10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
de20: 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
de30: 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
de40: 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
de50: 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
de90: 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
dea0: 76 65 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a  ver time */../*.
deb0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
dec0: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
ded0: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
dee0: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
def0: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
df00: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
df10: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
df20: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
df30: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
df40: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
df50: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
df60: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
df70: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
df80: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
df90: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
dfa0: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
dfb0: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
dfc0: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
dfd0: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
dfe0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
dff0: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
e000: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
e010: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
e020: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
e030: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
e040: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
e050: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
e060: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
e070: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a  e function. If.*
e080: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
e090: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
e0a0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
e0b0: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
e0c0: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
e0d0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
e0e0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e0f0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
e100: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
e110: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
e120: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
e130: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
e140: 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   DFUNCTION(zN
e150: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
e160: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
e170: 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f      Like FUNCTIO
e180: 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74  N except it omit
e190: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
e1a0: 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20  C_CONSTANT flag 
e1b0: 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20  and.**     adds 
e1c0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
e1d0: 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55  SLOCHNG flag.  U
e1e0: 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74  sed for date & t
e1f0: 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ime functions.**
e200: 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f       and functio
e210: 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76  ns like sqlite_v
e220: 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61  ersion() that ca
e230: 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f  n change, but no
e240: 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20  t during.**     
e250: 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a  a single query..
e260: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
e270: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
e280: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
e290: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
e2a0: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
e2b0: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
e2c0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
e2d0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
e2e0: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
e2f0: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
e300: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
e310: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
e320: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
e330: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
e340: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
e350: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
e360: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
e370: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
e380: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
e390: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
e3a0: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
e3b0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
e3c0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
e3d0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
e3e0: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
e3f0: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
e400: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
e410: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
e420: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a   by a call to C.
e430: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
e440: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
e450: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
e460: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
e470: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
e480: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
e490: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
e4a0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
e4b0: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
e4c0: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
e4d0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
e4e0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
e4f0: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
e500: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
e510: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
e520: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
e530: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e540: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
e550: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
e560: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
e570: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
e580: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
e590: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
e5a0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
e5b0: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
e5c0: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
e5d0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
e5e0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
e5f0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
e600: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
e610: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
e620: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
e630: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
e640: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
e650: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
e660: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
e670: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
e680: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
e690: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
e6a0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
e6b0: 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
e6c0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
e6d0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
e6e0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
e6f0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
e700: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
e710: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46   {0} }.#define F
e720: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
e730: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e740: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
e750: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51  gs) \.  {nArg,SQ
e760: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e770: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
e780: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
e790: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
e7a0: 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45  lags,\.   SQLITE
e7b0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
e7c0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
e7d0: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
e7e0: 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49  efine STR_FUNCTI
e7f0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
e800: 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  pArg, bNC, xFunc
e810: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
e820: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
e830: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
e840: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
e850: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41  EDCOLL), \.   pA
e860: 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  rg, 0, xFunc, 0,
e870: 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
e880: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
e890: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
e8a0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
e8b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
e8c0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
e8d0: 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
e8e0: 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
e8f0: 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  eFunc, 0, #zName
e900: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
e910: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
e920: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
e930: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
e940: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
e950: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
e960: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
e970: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
e980: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
e990: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
e9a0: 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69  Name, {0}}.#defi
e9b0: 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e  ne AGGREGATE2(zN
e9c0: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
e9d0: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
e9e0: 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  l, extraFlags) \
e9f0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ea00: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
ea10: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
ea20: 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20  extraFlags, \.  
ea30: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
ea40: 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
ea50: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
ea60: 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c   {0}}../*.** All
ea70: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
ea80: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
ea90: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
eaa0: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
eab0: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
eac0: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
ead0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
eae0: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
eaf0: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
eb00: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
eb10: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
eb20: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
eb30: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
eb40: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
eb50: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
eb60: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
eb70: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
eba0: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
ebb0: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
ebc0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ebe0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
ebf0: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
ec00: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
ec10: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
ec20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ec30: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
ec40: 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
ec50: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec70: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
ec80: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
ec90: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
eca0: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
ecb0: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
ecc0: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
ecd0: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
ece0: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
ecf0: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
ed00: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
ed10: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
ed20: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
ed30: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
ed40: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
ed50: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
ed60: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
ed70: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
ed80: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
ed90: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
eda0: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
edb0: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
edc0: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
edd0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
ede0: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
edf0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
ee00: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
ee10: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
ee20: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
ee30: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
ee40: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
ee50: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
ee60: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
ee70: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee90: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
eea0: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
eeb0: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
eec0: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eee0: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
eef0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
ef00: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
ef10: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
ef20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
ef30: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
ef40: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
ef50: 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef70: 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
ef80: 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
ef90: 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
efa0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
efb0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
efc0: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
efd0: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
efe0: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
eff0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
f000: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
f010: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
f020: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
f030: 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
f040: 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
f050: 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
f060: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
f070: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
f080: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
f090: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
f0a0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
f0b0: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
f0c0: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
f0d0: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
f0e0: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
f0f0: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
f100: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
f110: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
f120: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
f130: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
f140: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
f150: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
f160: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
f170: 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
f180: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
f190: 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
f1a0: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
f1b0: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
f1c0: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
f1d0: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
f1e0: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
f1f0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
f200: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
f210: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
f220: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
f230: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
f240: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
f250: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
f260: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
f270: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
f280: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
f290: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
f2a0: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
f2b0: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
f2c0: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
f2d0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
f2e0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
f2f0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
f300: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
f310: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
f320: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
f330: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
f340: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
f350: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
f360: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
f370: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
f380: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
f390: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
f3a0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
f3b0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
f3c0: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
f3d0: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
f3e0: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
f3f0: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
f400: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
f410: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
f420: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
f430: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
f440: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
f450: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
f460: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
f470: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
f480: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f4a0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
f4b0: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
f4c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f4d0: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
f4e0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
f4f0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
f500: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
f510: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
f520: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
f530: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
f540: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
f550: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
f560: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
f570: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
f580: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
f590: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
f5a0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
f5b0: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
f5c0: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
f5d0: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
f5e0: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
f5f0: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
f600: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
f610: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
f620: 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
f630: 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
f640: 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
f650: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
f660: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
f670: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
f680: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
f690: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
f6a0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
f6b0: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
f6c0: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
f6d0: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
f6e0: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
f6f0: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
f700: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
f710: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
f720: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
f730: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
f740: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
f750: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
f760: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
f770: 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
f780: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
f790: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
f7a0: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
f7b0: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
f7c0: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
f7d0: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
f7e0: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
f7f0: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
f800: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
f810: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
f820: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
f830: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
f840: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
f850: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
f860: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
f870: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
f880: 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
f890: 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
f8a0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
f8b0: 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66  LOB     'A'.#def
f8c0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
f8d0: 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
f8e0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
f8f0: 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
f900: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
f910: 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
f920: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
f930: 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
f940: 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
f950: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
f960: 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
f970: 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
f980: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
f990: 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
f9a0: 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
f9b0: 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
f9c0: 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
f9d0: 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alue..*/.#define
f9e0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
f9f0: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
fa00: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
fa10: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
fa20: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
fa30: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
fa40: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
fa50: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
fa60: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
fa70: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
fa80: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
fa90: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
faa0: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
fab0: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
fac0: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
fad0: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
fae0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
faf0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
fb00: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
fb10: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
fb20: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
fb30: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
fb40: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
fb50: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
fb60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
fb70: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
fb80: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
fb90: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
fba0: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
fbb0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
fbc0: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
fbd0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
fbe0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
fbf0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
fc00: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
fc10: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
fc20: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
fc30: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
fc40: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
fc50: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
fc60: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
fc70: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
fc80: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
fc90: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
fca0: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
fcb0: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
fcc0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
fcd0: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49   schema..**.** I
fce0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
fcf0: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
fd00: 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
fd10: 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
fd20: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
fd30: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
fd40: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
fd50: 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
fd60: 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
fd70: 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
fd80: 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
fd90: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
fda0: 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
fdb0: 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
fdc0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
fdd0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
fde0: 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
fdf0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
fe00: 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  le.** implementa
fe10: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
fe20: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
fe30: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
fe40: 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73  tween.** databas
fe50: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
fe60: 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
fe70: 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
fe80: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73  ry database.** s
fe90: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
fea0: 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
feb0: 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
fec0: 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
fed0: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
fee0: 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
fef0: 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
ff00: 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
ff10: 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
ff20: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
ff30: 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
ff40: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
ff50: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
ff60: 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
ff70: 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
ff80: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
ff90: 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
ffa0: 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20   real tables.** 
ffb0: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
ffc0: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
ffd0: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
ffe0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a   of the callers.
fff0: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
10000 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
10010 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
10020 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
10030 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
10040 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
10050 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
10060 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
10070 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
10080 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
10090 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
100a0 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
100b0 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
100c0 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
100d0 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
100e0 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
100f0 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
10100 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
10110 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
10120 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
10130 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
10140 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
10150 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
10160 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
10170 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
10180 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
10190 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
101a0 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
101b0 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
101c0 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
101d0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
101e0 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
101f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
10200 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
10210 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
10220 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
10230 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
10240 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
10250 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
10260 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
10270 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
10280 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
10290 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
102a0 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
102b0 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
102c0 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
102d0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
102e0 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65  re not.** delete
102f0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
10300 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
10310 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
10320 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64  ect()ed.** immed
10330 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
10340 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
10350 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
10360 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
10370 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
10380 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
10390 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
103a0 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
103b0 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
103c0 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
103d0 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
103e0 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
103f0 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a  xDisconnected.**
10400 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
10410 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
10420 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
10430 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
10440 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
10450 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
10460 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
10470 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
10480 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
10490 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
104a0 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
104b0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
104c0 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
104d0 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
104e0 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
104f0 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
10500 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
10510 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
10520 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
10530 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
10540 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
10550 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
10560 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
10570 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
10580 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
10590 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73  llocated by.** s
105a0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
105b0 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
105c0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
105d0 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
105e0 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73  b as.** the firs
105f0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
10600 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
10610 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
10620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
10630 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10640 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
10650 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
10660 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
10670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
10680 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
10690 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
106a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
106b0 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
106c0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
106d0 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
106e0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
106f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10700 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
10710 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
10720 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
10730 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
10740 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
10750 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
10760 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
10770 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
10780 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
10790 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
107a0 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
107b0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
107c0 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
107d0 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
107e0 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
107f0 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
10800 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  or each SQL tabl
10810 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65  e and view is re
10820 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
10830 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  ory.** by an ins
10840 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10850 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10860 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
10870 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
10880 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
10890 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
108a0 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
108b0 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
108c0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
108d0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
108e0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
108f0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
10900 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
10910 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
10920 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
10930 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
10940 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
10950 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
10960 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
10970 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
10980 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
10990 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
109a0 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
109b0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
109c0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
109d0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
109e0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
109f0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
10a00 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c  olumn */.  ExprL
10a10 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
10a20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
10a30 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20  straints */.    
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a50 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f     /*   ... also
10a60 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20   used as column 
10a70 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56  name list in a V
10a80 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  IEW */.  int tnu
10a90 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
10aa0 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   Root BTree page
10ab0 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
10ac0 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
10ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
10ae0 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
10af0 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
10b00 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20   the rowid */.  
10b10 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
10b20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10b30 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
10b40 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36  s table */.  u16
10b50 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
10b60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
10b70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
10b80 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  Table */.  LogEs
10b90 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
10ba0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
10bb0 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
10bc0 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
10bd0 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
10be0 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
10bf0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
10c00 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
10c10 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
10c20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
10c30 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
10c40 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
10c50 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
10c60 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
10c70 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
10c80 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c  endif.  u8 tabFl
10c90 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
10ca0 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
10cb0 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
10cc0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
10cd0 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
10ce0 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
10cf0 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
10d00 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
10d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
10d20 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
10d30 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
10d40 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
10d50 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
10d60 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
10d70 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
10d80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10d90 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
10da0 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
10db0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
10dc0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
10dd0 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
10de0 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
10df0 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a   /* 0: module 1:
10e00 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20   schema 2: vtab 
10e10 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20  name 3...: args 
10e20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
10e30 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
10e40 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
10e50 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
10e60 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
10e70 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
10e80 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
10e90 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
10ea0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
10eb0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
10ec0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
10ed0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
10ee0 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
10ef0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
10f00 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
10f10 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
10f20 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
10f30 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
10f40 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46  bFlags..**.** TF
10f50 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69  _OOOHidden appli
10f60 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20  es to tables or 
10f70 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68  view that have h
10f80 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68  idden columns th
10f90 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  at are.** follow
10fa0 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e  ed by non-hidden
10fb0 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70   columns.  Examp
10fc0 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52  le:  "CREATE VIR
10fd0 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49  TUAL TABLE x USI
10fe0 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49  NG.** vtab1(a HI
10ff0 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e  DDEN, b);".  Sin
11000 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d  ce "b" is a non-
11010 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75  hidden column bu
11020 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c  t "a" is hidden,
11030 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69  .** the TF_OOOHi
11040 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77  dden attribute w
11050 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68  ould apply in th
11060 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74  is case.  Such t
11070 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a  ables require.**
11080 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
11090 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20  g during INSERT 
110a0 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23  processing..*/.#
110b0 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
110c0 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20  ly        0x01  
110d0 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
110e0 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
110f0 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
11100 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20  ral       0x02  
11110 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
11120 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11130 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
11140 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a  Key   0x04    /*
11150 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   Table has a pri
11160 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
11170 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65  ine TF_Autoincre
11180 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f  ment   0x08    /
11190 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
111a0 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
111b0 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
111c0 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20  e TF_Virtual    
111d0 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
111e0 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  Is a virtual tab
111f0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
11200 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
11210 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72   0x20    /* No r
11220 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b  owid.  PRIMARY K
11230 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
11240 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69  .#define TF_NoVi
11250 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 34 30  sibleRowid  0x40
11260 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76      /* No user-v
11270 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63  isible "rowid" c
11280 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
11290 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20   TF_OOOHidden   
112a0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
112b0 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64  ut-of-Order hidd
112c0 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a  en columns */...
112d0 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
112e0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
112f0 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
11300 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
11310 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
11320 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
11330 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
11340 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
11350 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
11360 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
11370 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
11380 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
11390 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
113a0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
113b0 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
113c0 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
113d0 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29  gs & TF_Virtual)
113e0 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
113f0 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
11400 29 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a  )      0.#endif.
11410 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
11420 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20   determine if a 
11430 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e  column is hidden
11440 2e 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  .  IsOrdinaryHid
11450 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f  denColumn().** o
11460 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f  nly works for no
11470 6e 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  n-virtual tables
11480 20 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65   (ordinary table
11490 73 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64  s and views) and
114a0 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61   is.** always fa
114b0 6c 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54  lse unless SQLIT
114c0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
114d0 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e  COLUMNS is defin
114e0 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69  ed.  The.** IsHi
114f0 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63  ddenColumn() mac
11500 72 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75  ro is general pu
11510 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65  rpose..*/.#if de
11520 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
11530 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
11540 4e 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  NS).#  define Is
11550 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
11560 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
11570 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
11580 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
11590 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
115a0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
115b0 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67  ) (((X)->colFlag
115c0 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
115d0 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64  EN)!=0).#elif !d
115e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
115f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
11600 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
11610 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
11620 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46       (((X)->colF
11630 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
11640 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65  IDDEN)!=0).#  de
11650 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
11660 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
11670 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
11680 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
11690 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20  X)         0.#  
116a0 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
116b0 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
116c0 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44   0.#endif.../* D
116d0 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
116e0 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
116f0 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
11700 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
11710 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
11720 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65  utRowid)==0).#de
11730 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69  fine VisibleRowi
11740 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46  d(X) (((X)->tabF
11750 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69  lags & TF_NoVisi
11760 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  bleRowid)==0)../
11770 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
11780 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
11790 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
117a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
117b0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
117c0 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
117d0 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
117e0 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
117f0 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
11800 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
11810 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
11820 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
11830 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
11840 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
11850 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
11860 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
11870 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
11880 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
11890 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
118a0 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
118b0 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
118c0 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
118d0 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
118e0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
118f0 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
11900 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
11910 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
11920 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
11930 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
11940 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
11950 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
11960 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
11970 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
11980 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
11990 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
119a0 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
119b0 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
119c0 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
119d0 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
119e0 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
119f0 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
11a00 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
11a10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11a20 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
11a30 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
11a40 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
11a50 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
11a60 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
11a70 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
11a80 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
11a90 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
11aa0 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
11ab0 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
11ac0 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
11ad0 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
11ae0 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
11af0 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
11b00 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
11b10 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
11b20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
11b30 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
11b40 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
11b50 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
11b60 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
11b70 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
11b80 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
11b90 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
11ba0 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
11bb0 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
11bc0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
11bd0 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
11be0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
11bf0 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
11c00 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
11c10 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
11c20 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
11c30 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
11c40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
11c50 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
11c60 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
11c70 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
11c80 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
11c90 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
11ca0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
11cb0 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
11cc0 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
11cd0 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
11ce0 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
11cf0 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
11d00 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
11d10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
11d20 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
11d30 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
11d40 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
11d50 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
11d60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
11d70 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
11d80 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
11d90 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
11da0 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
11db0 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
11dc0 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
11dd0 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
11de0 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
11df0 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
11e00 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
11e10 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
11e20 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
11e30 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
11e40 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
11e50 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
11e60 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
11e70 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
11e80 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
11e90 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
11ea0 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
11eb0 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
11ec0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11ed0 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
11ee0 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
11ef0 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
11f00 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
11f10 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
11f20 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
11f30 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
11f40 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
11f50 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
11f60 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
11f70 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
11f80 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
11f90 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
11fa0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
11fb0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
11fc0 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
11fd0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
11fe0 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
11ff0 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
12000 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
12010 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
12020 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
12030 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12040 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
12050 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
12060 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
12070 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
12080 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
12090 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
120a0 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
120b0 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
120c0 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
120d0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
120e0 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
120f0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
12100 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
12110 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
12120 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
12130 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
12140 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
12150 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
12160 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
12170 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
12180 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
12190 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
121a0 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
121b0 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
121c0 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
121d0 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
121e0 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
121f0 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
12200 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
12210 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
12220 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
12230 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
12240 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
12250 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
12260 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
12270 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
12280 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
12290 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
122a0 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
122b0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
122c0 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
122d0 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
122e0 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
122f0 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
12300 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
12310 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
12320 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
12330 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
12340 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
12350 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
12360 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
12370 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
12380 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
12390 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
123a0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
123b0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
123c0 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
123d0 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
123e0 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
123f0 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
12400 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
12410 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
12420 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
12430 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
12440 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a  foreign key..**.
12450 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
12460 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
12470 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
12480 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
12490 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
124a0 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
124b0 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
124c0 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
124d0 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
124e0 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
124f0 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
12500 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
12510 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
12520 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
12530 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
12540 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
12550 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
12560 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
12570 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
12580 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
12590 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
125a0 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
125b0 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
125c0 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
125d0 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
125e0 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
125f0 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
12600 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
12610 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
12620 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
12630 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
12640 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
12650 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
12660 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
12670 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
12680 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
12690 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
126a0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
126b0 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
126c0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
126d0 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
126e0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
126f0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
12700 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
12710 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
12720 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
12730 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
12740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
12750 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
12760 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
12770 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
12780 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
12790 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
127a0 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
127b0 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
127c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
127d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
127e0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
127f0 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
12800 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
12810 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
12820 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
12830 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20   control the.** 
12840 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68  comparison of th
12850 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73  e two index keys
12860 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
12870 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61  t aSortOrder[] a
12880 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20  nd aColl[] have 
12890 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20  nField+1 slots. 
128a0 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46   There.** are nF
128b0 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74  ield slots for t
128c0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  he columns of an
128d0 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20   index then one 
128e0 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f  extra slot.** fo
128f0 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74  r the rowid at t
12900 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
12910 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33  t KeyInfo {.  u3
12920 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  2 nRef;         
12930 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
12940 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69  eferences to thi
12950 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  s KeyInfo object
12960 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
12970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
12980 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
12990 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
129a0 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
129b0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
129c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
129d0 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   key columns in 
129e0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  the index */.  u
129f0 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20  16 nXField;     
12a00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12a10 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74  columns beyond t
12a20 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a  he key columns *
12a30 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  /.  sqlite3 *db;
12a40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
12a50 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12a60 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  on */.  u8 *aSor
12a70 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
12a80 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
12a90 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  ch column. */.  
12aa0 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31  CollSeq *aColl[1
12ab0 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67  ];  /* Collating
12ac0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
12ad0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b  ch term of the k
12ae0 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ey */.};../*.** 
12af0 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
12b00 73 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68  s a record which
12b10 20 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64   has been parsed
12b20 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
12b30 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20  dual.** fields, 
12b40 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
12b50 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70   of doing a comp
12b60 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20  arison..**.** A 
12b70 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
12b80 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
12b90 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
12ba0 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
12bb0 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
12bc0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
12bd0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
12be0 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
12bf0 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
12c00 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
12c10 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
12c20 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
12c30 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
12c40 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
12c50 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
12c60 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
12c70 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
12c80 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
12c90 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
12ca0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73  of this object s
12cb0 65 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22  erves as a "key"
12cc0 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61   for doing a sea
12cd0 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64  rch on.** an ind
12ce0 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67  ex b+tree. The g
12cf0 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63  oal of the searc
12d00 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65  h is to find the
12d10 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69   entry that.** i
12d20 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20  s closed to the 
12d30 6b 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79  key described by
12d40 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
12d50 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74  his object might
12d60 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20   hold.** just a 
12d70 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65  prefix of the ke
12d80 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
12d90 66 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65  f fields is give
12da0 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f  n by.** pKeyInfo
12db0 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  ->nField..**.** 
12dc0 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69  The r1 and r2 fi
12dd0 65 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c  elds are the val
12de0 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66  ues to return if
12df0 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73   this key is les
12e00 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65  s than.** or gre
12e10 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20  ater than a key 
12e20 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65  in the btree, re
12e30 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
12e40 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a  se are normally.
12e50 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73  ** -1 and +1 res
12e60 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d  pectively, but m
12e70 69 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64  ight be inverted
12e80 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66   to +1 and -1 if
12e90 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69   the b-tree.** i
12ea0 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e  s in DESC order.
12eb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
12ec0 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
12ed0 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74  ons actually ret
12ee0 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77  urn default_rc w
12ef0 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a  hen they find.**
12f00 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61   an equals compa
12f10 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f  rison.  default_
12f20 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c  rc can be -1, 0,
12f30 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72   or +1.  If ther
12f40 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c  e are.** multipl
12f50 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  e entries in the
12f60 20 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65   b-tree with the
12f70 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20   same key (when 
12f80 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20  only looking.** 
12f90 61 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65  at the first pKe
12fa0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29  yInfo->nFields,)
12fb0 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   then default_rc
12fc0 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d   can be set to -
12fd0 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68  1 to.** cause th
12fe0 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64  e search to find
12ff0 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c   the last match,
13000 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20   or +1 to cause 
13010 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a  the search to.**
13020 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20   find the first 
13030 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  match..**.** The
13040 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
13050 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73  functions will s
13060 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75  et eqSeen to tru
13070 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a  e if they ever.*
13080 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20  * get and equal 
13090 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d  results when com
130a0 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75  paring this stru
130b0 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65  cture to a b-tre
130c0 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65  e record..** Whe
130d0 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c  n default_rc!=0,
130e0 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68   the search migh
130f0 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20  t end up on the 
13100 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65  record immediate
13110 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65  ly.** before the
13120 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20   first match or 
13130 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
13140 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  r the last match
13150 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e  .  The.** eqSeen
13160 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69   field will indi
13170 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20  cate whether or 
13180 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74  not an exact mat
13190 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  ch exists in the
131a0 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73  .** b-tree..*/.s
131b0 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
131c0 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
131d0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
131e0 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
131f0 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
13200 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  tion */.  Mem *a
13210 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
13220 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   Values */.  u16
13230 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
13240 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
13250 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
13260 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74   */.  i8 default
13270 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  _rc;      /* Com
13280 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69  parison result i
13290 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c  f keys are equal
132a0 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65   */.  u8 errCode
132b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72  ;         /* Err
132c0 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78  or detected by x
132d0 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43  RecordCompare (C
132e0 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29  ORRUPT or NOMEM)
132f0 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20   */.  i8 r1;    
13300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
13310 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
13320 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
13330 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20   i8 r2;         
13340 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
13350 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20   return if (rhs 
13360 3c 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20 65  < lhs) */.  u8 e
13370 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20  qSeen;          
13380 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71  /* True if an eq
13390 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f  uality compariso
133a0 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20  n has been seen 
133b0 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
133c0 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
133d0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
133e0 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
133f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
13400 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13410 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
13420 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
13430 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
13440 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
13450 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
13460 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
13470 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
13480 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
13490 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
134a0 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
134b0 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
134c0 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
134d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
134e0 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
134f0 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
13500 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
13510 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
13520 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
13530 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
13540 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
13550 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
13560 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
13570 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
13580 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
13590 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
135a0 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
135b0 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
135c0 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
135d0 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
135e0 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
135f0 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
13600 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
13610 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
13620 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69  ecause the.** fi
13630 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
13640 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
13650 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
13660 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
13670 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
13680 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
13690 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
136a0 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
136b0 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
136c0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
136d0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
136e0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
136f0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
13700 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
13710 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
13720 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
13730 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
13740 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
13750 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
13760 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
13770 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
13780 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
13790 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
137a0 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
137b0 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
137c0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
137d0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
137e0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
137f0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
13800 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  .** algorithm to
13810 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72   employ whenever
13820 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
13830 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ade to insert a 
13840 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c  non-unique.** el
13850 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69  ement..**.** Whi
13860 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45  le parsing a CRE
13870 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45  ATE TABLE or CRE
13880 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ATE INDEX statem
13890 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ent in order to.
138a0 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45  ** generate VDBE
138b0 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65   code (as oppose
138c0 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65  d to parsing one
138d0 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71   read from an sq
138e0 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74  lite_master.** t
138f0 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20  able as part of 
13900 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74  parsing an exist
13910 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68  ing database sch
13920 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20  ema), transient 
13930 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20  instances.** of 
13940 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d  this structure m
13950 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49  ay be created. I
13960 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
13970 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61  Index.tnum varia
13980 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  ble is.** used t
13990 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72  o store the addr
139a0 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e  ess of a VDBE in
139b0 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61  struction, not a
139c0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a   database page.*
139d0 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e  * number (it can
139e0 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61  not - the databa
139f0 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61  se page is not a
13a00 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74  llocated until t
13a10 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72  he VDBE.** progr
13a20 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e  am is executed).
13a30 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69   See convertToWi
13a40 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28  thoutRowidTable(
13a50 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
13a60 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b  /.struct Index {
13a70 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
13a80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13a90 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65  ame of this inde
13aa0 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f  x */.  i16 *aiCo
13ab0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13ac0 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
13ad0 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
13ae0 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
13af0 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a   0 */.  LogEst *
13b00 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20  aiRowLogEst;    
13b10 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45   /* From ANALYZE
13b20 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65  : Est. rows sele
13b30 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c  cted by each col
13b40 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  umn */.  Table *
13b50 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  pTable;         
13b60 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
13b70 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
13b80 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
13b90 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Aff;           /
13ba0 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
13bb0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
13bc0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
13bd0 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
13be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
13bf0 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
13c00 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
13c10 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
13c20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
13c30 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  a;         /* Sc
13c40 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
13c50 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
13c60 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
13c70 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20           /* for 
13c80 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75  each column: Tru
13c90 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d  e==DESC, False==
13ca0 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ASC */.  const c
13cb0 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
13cc0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
13cd0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
13ce0 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
13cf0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72   */.  Expr *pPar
13d00 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f  tIdxWhere;     /
13d10 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
13d20 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63  or partial indic
13d30 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
13d40 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20   *aColExpr;     
13d50 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65   /* Column expre
13d60 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
13d70 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13d80 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
13d90 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
13da0 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
13db0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
13dc0 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
13dd0 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
13de0 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
13df0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
13e00 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
13e10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
13e20 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
13e30 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
13e40 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
13e50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13e60 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
13e70 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
13e80 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
13e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
13ea0 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
13eb0 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
13ec0 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
13ed0 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
13ee0 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
13ef0 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
13f00 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
13f10 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
13f20 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
13f30 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
13f40 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
13f50 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
13f60 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
13f70 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
13f80 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
13f90 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
13fa0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
13fb0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
13fc0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
13fd0 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
13fe0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
13ff0 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
14000 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
14010 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
14020 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
14030 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
14040 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
14050 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
14060 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
14070 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
14080 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
14090 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
140a0 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
140b0 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
140c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
140d0 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
140e0 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
140f0 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
14100 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
14110 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
14120 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
14130 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
14140 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
14150 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
14160 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
14170 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
14180 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
14190 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
141a0 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
141b0 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
141c0 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
141d0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
141e0 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
141f0 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
14200 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
14210 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
14220 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
14230 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
14240 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
14250 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
14260 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
14270 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
14280 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
14290 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
142a0 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
142b0 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
142c0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
142d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
142e0 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
142f0 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
14300 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
14310 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
14320 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
14330 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
14340 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
14350 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
14360 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
14370 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
14380 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
14390 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
143a0 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
143b0 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
143c0 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
143d0 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
143e0 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
143f0 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
14400 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
14410 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
14420 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
14430 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
14440 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54  !=OE_None)../* T
14450 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d  he Index.aiColum
14460 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e  n[] values are n
14470 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65  ormally positive
14480 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a   integer.  But.*
14490 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65  * there are some
144a0 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   negative values
144b0 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69   that have speci
144c0 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23  al meaning:.*/.#
144d0 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20  define XN_ROWID 
144e0 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20      (-1)     /* 
144f0 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
14500 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23  s the rowid */.#
14510 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20  define XN_EXPR  
14520 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20      (-2)     /* 
14530 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
14540 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
14550 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  */../*.** Each s
14560 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
14570 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
14580 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
14590 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
145a0 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
145b0 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
145c0 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
145d0 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
145e0 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
145f0 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
14600 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
14610 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
14620 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
14630 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
14640 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
14650 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
14660 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
14670 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14680 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
14690 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
146a0 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
146b0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
146c0 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
146d0 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
146e0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
146f0 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
14700 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
14710 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
14720 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
14730 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
14740 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
14750 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
14760 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
14770 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
14780 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
14790 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d  * Each token com
147a0 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  ing out of the l
147b0 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61  exer is an insta
147c0 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
147d0 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e  tructure.  Token
147e0 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20  s are also used 
147f0 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78  as part of an ex
14800 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  pression..**.** 
14810 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d  Note if Token.z=
14820 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79  =0 then Token.dy
14830 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72  n and Token.n ar
14840 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a  e undefined and.
14850 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72  ** may contain r
14860 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44  andom values.  D
14870 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61  o not make any a
14880 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74  ssumptions about
14890 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e   Token.dyn.** an
148a0 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54  d Token.n when T
148b0 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74  oken.z==0..*/.st
148c0 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
148d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
148e0 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
148f0 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
14900 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
14910 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
14920 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
14930 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
14940 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
14950 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
14960 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
14970 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
14980 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
14990 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
149a0 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
149b0 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
149c0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
149d0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
149e0 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
149f0 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
14a00 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
14a10 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
14a20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
14a30 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
14a40 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
14a50 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
14a60 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
14a70 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
14a80 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
14a90 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
14aa0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
14ab0 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
14ac0 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
14ad0 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
14ae0 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
14af0 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
14b00 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
14b10 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
14b20 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
14b30 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
14b40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
14b50 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
14b60 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
14b70 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
14b80 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
14b90 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
14ba0 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
14bb0 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
14bc0 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
14bd0 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
14be0 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
14bf0 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
14c00 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14c20 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
14c30 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
14c40 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
14c50 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
14c60 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
14c70 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
14c80 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
14c90 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
14ca0 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14cc0 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
14cd0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
14ce0 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
14cf0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
14d00 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
14d10 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
14d20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
14d30 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
14d40 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
14d50 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
14d60 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
14d70 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
14d80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
14d90 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
14da0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
14db0 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
14dc0 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
14dd0 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
14de0 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
14df0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
14e00 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
14e10 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
14e20 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
14e30 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
14e40 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
14e50 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
14e60 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
14e70 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
14e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
14e90 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
14ea0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
14eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
14ec0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
14ed0 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
14ee0 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
14ef0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
14f00 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
14f10 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
14f20 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
14f30 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
14f40 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
14f50 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
14f60 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
14f70 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14f90 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
14fa0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
14fb0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
14fc0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
14fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14fe0 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
14ff0 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
15000 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
15010 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15020 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
15030 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
15040 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
15050 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
15060 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
15070 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
15080 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
15090 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
150b0 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
150c0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
150d0 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
150e0 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15100 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15110 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
15120 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
15130 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
15140 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
15150 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
15160 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
15170 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
15180 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
15190 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
151a0 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
151b0 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
151c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
151d0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
151e0 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15200 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
15210 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
15220 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
15230 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
15240 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
15250 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
15260 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
15270 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
15280 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
152a0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
152b0 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
152c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
152d0 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
152e0 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
152f0 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
15300 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
15310 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
15320 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
15330 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
15340 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
15350 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
15360 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
15370 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
15380 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
15390 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
153a0 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
153b0 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
153c0 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
153d0 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
153e0 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
153f0 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
15400 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
15410 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
15420 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
15430 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
15440 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
15450 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
15460 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
15470 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
15480 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
15490 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
154a0 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
154b0 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
154c0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
154d0 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
154e0 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
154f0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
15500 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
15510 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
15520 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
15530 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
15540 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
15550 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
15560 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
15570 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
15580 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
15590 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
155a0 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
155b0 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
155c0 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
155d0 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
155e0 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
155f0 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
15600 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
15610 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
15620 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
15630 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
15640 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
15650 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
15660 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
15670 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
15680 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
15690 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
156a0 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
156b0 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
156c0 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
156d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
156e0 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
156f0 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
15700 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a  LOAT, TK_BLOB,.*
15710 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
15720 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
15730 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
15740 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
15750 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
15760 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
15770 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
15780 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
15790 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
157a0 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c  s the.** variabl
157b0 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
157c0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
157d0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
157e0 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
157f0 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
15800 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
15810 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
15820 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
15830 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
15840 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
15850 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
15860 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
15870 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
15880 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
15890 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
158a0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
158b0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
158c0 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
158d0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
158e0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
158f0 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
15900 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
15910 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
15920 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
15930 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
15940 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
15950 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
15960 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
15970 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
15980 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
15990 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
159a0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
159b0 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
159c0 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
159d0 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
159e0 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
159f0 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
15a00 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
15a10 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
15a20 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a  pr.x.pList is.**
15a30 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
15a40 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
15a50 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
15a60 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
15a70 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
15a80 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
15a90 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
15aa0 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
15ab0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
15ac0 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
15ad0 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
15ae0 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
15af0 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
15b00 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
15b10 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
15b20 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
15b30 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
15b40 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
15b50 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
15b60 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
15b70 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
15b80 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
15b90 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
15ba0 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
15bb0 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
15bc0 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
15bd0 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
15be0 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
15bf0 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
15c00 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
15c10 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
15c20 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
15c30 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
15c40 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
15c50 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
15c60 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74   mark.** charact
15c70 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
15c80 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
15c90 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
15ca0 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
15cb0 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
15cc0 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
15cd0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
15ce0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
15cf0 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
15d00 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
15d10 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
15d20 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
15d30 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
15d40 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
15d50 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
15d60 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
15d70 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
15d80 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
15d90 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
15da0 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
15db0 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
15dc0 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
15dd0 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
15de0 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
15df0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
15e00 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
15e10 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
15e20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
15e30 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
15e40 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
15e50 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
15e60 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
15e70 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
15e80 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
15e90 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
15ea0 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
15eb0 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
15ec0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
15ed0 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
15ee0 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
15ef0 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
15f00 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
15f10 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
15f20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
15f30 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
15f40 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
15f50 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
15f60 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
15f70 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
15f80 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
15f90 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
15fa0 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
15fb0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
15fc0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
15fd0 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
15fe0 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
15ff0 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
16000 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
16010 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
16020 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
16030 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
16040 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
16050 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
16060 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
16070 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
16080 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
16090 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
160a0 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
160b0 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
160c0 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
160d0 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
160e0 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
160f0 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
16100 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
16110 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
16120 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
16130 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
16140 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
16150 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
16160 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
16170 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
16180 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
16190 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
161a0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
161b0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
161c0 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
161d0 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
161e0 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
161f0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
16200 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
16210 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
16220 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
16230 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
16240 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
16250 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
16260 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
16270 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
16280 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
16290 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
162a0 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
162b0 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
162c0 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
162d0 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
162e0 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
162f0 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
16300 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
16310 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
16320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16330 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
16340 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
16350 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
16360 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
16370 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
16380 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
16390 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
163a0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
163b0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
163c0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
163d0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
163e0 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
163f0 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
16400 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
16410 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
16420 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
16430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16470 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
16480 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
16490 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
164a0 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
164b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
164c0 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
164d0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
164e0 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
164f0 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
16500 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
16510 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
16520 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
16530 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
16540 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
16550 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
16560 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
16570 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
16580 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
16590 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
165a0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
165b0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
165c0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
165d0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
165e0 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
165f0 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
16600 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
16610 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
16620 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
16630 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
16640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16680 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
16690 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
166a0 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
166b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
166c0 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
166d0 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
166e0 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
166f0 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
16700 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
16710 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
16720 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
16730 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
16760 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
16770 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16790 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
167a0 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
167b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
167c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
167d0 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
167e0 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
167f0 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
16800 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
16810 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
16820 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
16830 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
16860 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
16870 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
16880 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
16890 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
168a0 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
168b0 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
168c0 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
168d0 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
168e0 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
168f0 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
16900 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
16910 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
16920 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
16930 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
16940 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
16950 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
16960 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
16970 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
16980 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
16990 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
169a0 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
169d0 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
169e0 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
169f0 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
16a00 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
16a10 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
16a20 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
16a30 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
16a40 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
16a50 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
16a60 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
16a70 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
16a80 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
16a90 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
16aa0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
16ab0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
16ac0 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
16ad0 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
16ae0 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
16af0 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
16b00 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16b10 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
16b20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
16b30 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
16b40 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16b50 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
16b60 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
16b70 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
16b80 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
16b90 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
16ba0 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
16bb0 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
16bc0 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
16bd0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
16be0 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
16bf0 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
16c00 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
16c10 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
16c20 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
16c30 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
16c40 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
16c50 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
16c60 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
16c70 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
16c80 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
16c90 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
16ca0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
16cb0 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
16cc0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
16cd0 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
16ce0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
16cf0 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
16d00 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
16d10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
16d20 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
16d30 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
16d40 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
16d50 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
16d60 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
16d70 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
16d80 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
16d90 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
16da0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
16db0 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
16dc0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
16dd0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
16de0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
16df0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
16e00 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
16e10 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
16e20 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
16e30 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
16e40 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
16e50 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
16e60 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
16e70 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
16e80 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
16e90 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
16ea0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
16eb0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
16ec0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
16ed0 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
16ee0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
16ef0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
16f00 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
16f10 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
16f20 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
16f30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
16f40 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
16f50 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
16f60 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
16f70 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
16f80 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
16f90 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
16fa0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
16fb0 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
16fc0 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
16fd0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
16fe0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
16ff0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
17000 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
17010 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
17020 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
17030 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
17040 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
17050 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
17060 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
17070 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
17080 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
17090 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
170a0 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
170b0 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
170c0 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
170d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
170e0 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
170f0 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
17100 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
17110 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
17120 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
17130 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
17140 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
17150 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
17160 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69  ./*.** Combinati
17170 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f  ons of two or mo
17180 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f  re EP_* flags.*/
17190 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
171a0 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
171b0 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f  e|EP_Subquery) /
171c0 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65 73  * Propagate thes
171d0 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20 2a  e bits up tree *
171e0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
171f0 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
17200 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
17210 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
17220 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
17230 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
17240 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
17250 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
17260 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
17270 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
17280 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
17290 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
172a0 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
172b0 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
172c0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
172d0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
172e0 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
172f0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
17300 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
17310 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
17320 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
17330 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
17340 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
17350 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
17360 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
17370 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
17380 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
17390 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
173a0 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
173b0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
173c0 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
173d0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
173e0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
173f0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
17400 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
17410 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
17420 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
17430 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
17440 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
17450 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
17460 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
17470 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
17480 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72  rmal Expr.** str
17490 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
174a0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
174b0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
174c0 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a   in Expr.flags.*
174d0 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
174e0 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
174f0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
17500 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
17510 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
17520 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
17530 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
17540 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
17550 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
17560 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
17570 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
17580 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
17590 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
175a0 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
175b0 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
175c0 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
175d0 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
175e0 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
175f0 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
17600 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
17610 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
17620 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
17630 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ment.** above sq
17640 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
17650 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
17660 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
17670 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
17680 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
17690 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
176a0 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
176b0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
176c0 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
176d0 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
176e0 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
176f0 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
17700 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
17710 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
17720 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
17730 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
17740 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
17750 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
17760 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
17770 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
17780 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
17790 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
177a0 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
177b0 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
177c0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
177d0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
177e0 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
177f0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
17800 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
17810 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
17820 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
17830 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
17840 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
17850 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
17860 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
17870 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
17880 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
17890 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
178a0 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
178b0 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
178c0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
178d0 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
178e0 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
178f0 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
17900 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
17910 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
17920 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
17930 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
17940 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
17950 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
17960 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
17970 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
17980 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
17990 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
179a0 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
179b0 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
179c0 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
179d0 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
179e0 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
179f0 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
17a00 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
17a10 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
17a20 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
17a30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17a40 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
17a50 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
17a60 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
17a70 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
17a80 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
17a90 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
17aa0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
17ab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17ac0 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
17ad0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
17ae0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
17af0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
17b00 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
17b10 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
17b20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
17b30 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
17b40 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
17b50 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
17b60 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
17b70 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
17b80 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
17b90 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
17ba0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
17bb0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
17bc0 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
17bd0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
17be0 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
17bf0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
17c00 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
17c10 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
17c20 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
17c30 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
17c40 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
17c50 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
17c60 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
17c70 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
17c80 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
17c90 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
17ca0 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
17cb0 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
17cc0 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
17cd0 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
17ce0 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
17cf0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
17d00 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
17d10 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
17d20 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
17d30 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
17d40 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
17d50 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
17d60 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
17d70 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
17d80 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
17d90 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
17da0 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
17db0 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
17dc0 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
17dd0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
17de0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
17df0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
17e00 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
17e10 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
17e20 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
17e30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
17e40 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
17e50 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
17e60 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
17e70 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
17e80 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
17e90 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
17ea0 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
17eb0 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
17ec0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
17ed0 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
17ee0 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
17ef0 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
17f00 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
17f10 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
17f20 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
17f30 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
17f40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
17f50 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
17f60 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
17f70 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
17f80 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
17f90 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
17fa0 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
17fb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
17fc0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
17fd0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
17fe0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
17ff0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
18000 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
18010 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
18020 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
18030 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
18040 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
18050 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
18060 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
18070 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
18080 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
18090 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
180a0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
180b0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
180c0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
180d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
180e0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
180f0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
18100 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
18110 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
18120 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
18130 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
18140 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
18150 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
18160 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
18170 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
18180 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
18190 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
181a0 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
181b0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
181c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
181d0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
181e0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
181f0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
18200 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
18210 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
18220 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
18230 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
18240 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
18250 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
18260 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
18270 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
18280 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
18290 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
182a0 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
182b0 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
182c0 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
182d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
182e0 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
182f0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
18300 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
18310 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
18320 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
18330 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
18340 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
18350 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42  .#ifdef SQLITE_B
18360 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79  ITMASK_TYPE.  ty
18370 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  pedef SQLITE_BIT
18380 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73  MASK_TYPE Bitmas
18390 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
183a0 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
183b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
183c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
183d0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
183e0 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
183f0 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
18400 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
18410 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
18420 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
18430 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
18440 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
18450 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
18460 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
18470 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
18480 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
18490 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  t)1)<<(n)).#defi
184a0 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20  ne ALLBITS      
184b0 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f  ((Bitmask)-1)../
184c0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
184d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
184e0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
184f0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
18500 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
18510 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
18520 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
18530 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
18540 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
18550 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
18560 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
18570 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
18580 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
18590 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
185a0 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
185b0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
185c0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
185d0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
185e0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
185f0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
18600 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
18610 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
18620 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
18630 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
18640 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
18650 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
18660 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
18670 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
18680 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
18690 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
186a0 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
186b0 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
186c0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
186d0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
186e0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
186f0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
18700 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
18710 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
18720 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
18730 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
18740 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
18750 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
18760 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
18770 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
18780 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
18790 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
187a0 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
187b0 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
187c0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
187d0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
187e0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
187f0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
18800 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
18810 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
18820 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
18830 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
18840 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
18850 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
18860 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
18870 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
18880 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
18890 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
188a0 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
188b0 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
188c0 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
188d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
188e0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
188f0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
18900 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
18910 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
18920 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
18930 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
18940 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
18950 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
18960 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
18970 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
18980 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
18990 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
189a0 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
189b0 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
189c0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
189d0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
189e0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
189f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
18a00 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
18a10 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
18a20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
18a30 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
18a40 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
18a50 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
18a60 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
18a70 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
18a80 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
18a90 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
18aa0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
18ab0 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
18ac0 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
18ad0 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
18ae0 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
18af0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
18b00 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
18b10 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
18b20 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
18b30 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
18b40 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
18b50 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
18b60 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
18b70 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
18b80 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
18b90 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
18ba0 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
18bb0 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
18bc0 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ne */.    struct
18bd0 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e   {.      u8 join
18be0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
18bf0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
18c00 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
18c10 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
18c20 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18c30 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
18c40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
18c50 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
18c60 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
18c70 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
18c80 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
18c90 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
18ca0 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
18cb0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
18cc0 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
18cd0 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
18ce0 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
18cf0 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
18d00 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
18d10 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
18d20 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
18d30 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
18d40 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
18d50 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
18d60 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
18d70 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
18d80 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
18d90 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18da0 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
18db0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
18dc0 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
18dd0 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
18de0 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53   } fg;.#ifndef S
18df0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
18e00 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
18e10 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
18e20 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
18e30 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
18e40 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
18e50 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
18e60 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
18e70 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
18e80 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
18e90 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
18ea0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
18eb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
18ec0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
18ed0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
18ee0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
18ef0 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
18f00 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
18f10 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
18f20 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
18f30 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
18f40 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
18f50 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
18f60 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
18f70 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
18f80 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
18f90 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
18fa0 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
18fb0 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
18fc0 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
18fd0 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
18fe0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
18ff0 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
19000 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
19010 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
19020 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
19030 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
19040 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
19050 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
19060 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
19070 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
19080 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
19090 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
190a0 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
190b0 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
190c0 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
190d0 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
190e0 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
190f0 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
19100 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
19110 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
19120 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
19130 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
19140 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
19150 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
19160 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
19170 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
19180 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
19190 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
191a0 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
191b0 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
191c0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
191d0 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
191e0 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
191f0 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
19200 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
19210 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
19220 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
19230 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
19240 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
19250 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
19260 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
19270 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
19280 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
19290 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
192a0 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
192b0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
192c0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
192d0 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
192e0 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
192f0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
19300 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
19310 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
19320 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
19330 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
19340 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
19350 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
19360 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
19370 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
19380 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
19390 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
193a0 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
193b0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
193c0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
193d0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
193e0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
193f0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
19400 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
19410 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
19420 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19430 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
19440 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
19450 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
19460 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
19470 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19480 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
19490 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
194a0 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
194b0 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
194c0 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
194d0 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
194e0 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
194f0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
19500 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
19510 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
19520 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
19530 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
19540 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
19550 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
19560 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e   WHERE_NO_AUTOIN
19570 44 45 58 20 20 20 20 20 30 78 30 30 38 30 20 2f  DEX     0x0080 /
19580 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d  * Disallow autom
19590 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
195a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
195b0 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
195c0 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0100 /* pOrderB
195d0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
195e0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
195f0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
19600 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20  BY       0x0200 
19610 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
19620 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
19630 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
19640 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
19650 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30  STINCT    0x0400
19660 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
19670 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
19680 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
19690 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
196a0 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20        0x0800 /* 
196b0 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
196c0 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
196d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
196e0 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20  REOPEN_IDX      
196f0 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74   0x1000 /* Try t
19700 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  o use OP_ReopenI
19710 64 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  dx */.#define WH
19720 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
19730 49 52 4f 57 20 30 78 32 30 30 30 20 2f 2a 20 4f  IROW 0x2000 /* O
19740 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
19750 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
19760 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19770 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
19780 20 20 30 78 34 30 30 30 20 2f 2a 20 54 68 65 72    0x4000 /* Ther
19790 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
197a0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 2a 2f 0a  LIMIT clause */.
197b0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
197c0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
197d0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
197e0 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
197f0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
19800 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
19810 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
19820 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
19830 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
19840 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
19850 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
19860 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
19870 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
19880 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
19890 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
198a0 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
198b0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
198c0 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
198d0 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
198e0 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
198f0 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
19900 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
19910 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
19920 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
19930 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
19940 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
19950 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
19960 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
19970 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
19980 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
19990 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
199a0 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
199b0 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
199c0 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
199d0 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
199e0 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
199f0 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
19a00 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
19a10 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
19a20 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
19a30 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
19a40 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
19a50 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
19a60 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
19a70 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
19a80 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
19a90 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
19aa0 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
19ab0 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
19ac0 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
19ad0 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
19ae0 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
19af0 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
19b00 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
19b10 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
19b20 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
19b30 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
19b40 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
19b50 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
19b60 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
19b70 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
19b80 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
19b90 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
19ba0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
19bb0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
19bc0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
19bd0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
19be0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
19bf0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
19c00 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
19c10 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
19c20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
19c30 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
19c40 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
19c50 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
19c60 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
19c70 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
19c80 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
19c90 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
19ca0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
19cb0 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
19cc0 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
19cd0 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
19ce0 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
19cf0 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
19d00 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
19d10 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
19d20 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
19d30 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
19d40 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
19d50 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
19d60 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
19d70 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
19d80 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
19d90 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
19da0 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
19db0 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
19dc0 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
19dd0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
19de0 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
19df0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
19e00 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
19e10 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
19e20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
19e30 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
19e40 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
19e50 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
19e60 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
19e70 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
19e80 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
19e90 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
19ea0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
19eb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
19ec0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
19ed0 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
19ee0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
19ef0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19f00 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
19f10 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
19f20 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
19f30 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
19f40 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
19f50 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
19f60 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
19f70 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
19f80 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
19f90 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
19fa0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
19fb0 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f  **.** Note:  NC_
19fc0 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68  MinMaxAgg must h
19fd0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
19fe0 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41  ue as SF_MinMaxA
19ff0 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  gg and.** SQLITE
1a000 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a  _FUNC_MINMAX..**
1a010 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
1a020 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20  llowAgg  0x0001 
1a030 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
1a040 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
1a050 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
1a060 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
1a070 20 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20   0x0002  /* One 
1a080 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
1a090 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
1a0a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1a0b0 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1a0c0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1a0d0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1a0e0 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1a0f0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1a100 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1a110 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1a120 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1a130 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1a140 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
1a150 72 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20  rtIdx   0x0010  
1a160 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1a170 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
1a180 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
1a190 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72  efine NC_IdxExpr
1a1a0 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72     0x0020  /* Tr
1a1b0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1a1c0 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54  columns of CREAT
1a1d0 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
1a1e0 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  ne NC_MinMaxAgg 
1a1f0 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d  0x1000  /* min/m
1a200 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65  ax aggregates se
1a210 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62  en.  See note ab
1a220 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ove */../*.** An
1a230 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1a240 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1a250 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
1a260 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
1a270 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
1a280 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
1a290 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
1a2a0 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
1a2b0 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
1a2c0 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
1a2d0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
1a2e0 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
1a2f0 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
1a300 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
1a310 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
1a320 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
1a330 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
1a340 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
1a350 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
1a360 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
1a370 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
1a380 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
1a390 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
1a3a0 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
1a3b0 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
1a3c0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
1a3d0 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
1a3e0 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
1a3f0 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
1a400 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
1a410 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
1a420 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
1a430 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
1a440 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1a450 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
1a460 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
1a470 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
1a480 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
1a490 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
1a4a0 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
1a4b0 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
1a4c0 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
1a4d0 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
1a4e0 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1a4f0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
1a500 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
1a510 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
1a520 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
1a530 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
1a540 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
1a550 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
1a560 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1a570 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
1a580 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
1a590 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
1a5a0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1a5b0 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
1a5c0 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
1a5d0 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
1a5e0 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
1a5f0 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
1a600 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1a610 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
1a620 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1a630 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
1a640 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1a650 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1a660 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
1a670 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1a680 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
1a690 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
1a6a0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1a6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1a6c0 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
1a6d0 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
1a6e0 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
1a6f0 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74    LogEst nSelect
1a700 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
1a710 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
1a720 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
1a730 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20   u32 selFlags;  
1a740 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
1a750 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
1a760 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
1a770 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
1a780 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
1a790 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
1a7a0 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
1a7b0 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
1a7c0 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72  E_ENABLED.  char
1a7d0 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20   zSelName[12];  
1a7e0 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e     /* Symbolic n
1a7f0 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45  ame of this SELE
1a800 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67  CT use for debug
1a810 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ging */.#endif. 
1a820 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1a830 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1a840 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1a850 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1a860 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1a870 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1a880 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1a890 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1a8a0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1a8b0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1a8c0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1a8d0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1a8e0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1a8f0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1a900 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1a910 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1a920 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1a930 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1a940 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1a950 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1a960 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1a970 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1a980 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1a990 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1a9a0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1a9b0 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1a9c0 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1a9d0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1a9e0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1a9f0 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1aa00 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1aa10 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1aa20 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1aa30 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
1aa40 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
1aa50 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
1aa60 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1aa70 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57  not used. */.  W
1aa80 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1aa90 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c        /* WITH cl
1aaa0 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
1aab0 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72   this select. Or
1aac0 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   NULL. */.};../*
1aad0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
1aae0 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65  es for Select.se
1aaf0 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46  lFlags.  The "SF
1ab00 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20  " prefix stands 
1ab10 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46  for.** "Select F
1ab20 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lag"..*/.#define
1ab30 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1ab40 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1ab50 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1ab60 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1ab70 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1ab80 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1ab90 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1aba0 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1abb0 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1abc0 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1abd0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1abe0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1abf0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1ac00 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1ac10 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1ac20 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1ac30 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1ac40 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1ac50 65 72 61 6c 20 20 30 78 30 30 30 31 30 20 20 2f  eral  0x00010  /
1ac60 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1ac70 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1ac80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1ac90 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1aca0 30 30 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0020  /* sqlite3
1acb0 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1acc0 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1acd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1ace0 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1acf0 34 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  40  /* FROM subq
1ad00 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1ad10 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1ad20 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1ad30 64 20 20 20 20 20 20 20 30 78 30 30 30 38 30 20  d       0x00080 
1ad40 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1ad50 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1ad60 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1ad70 73 20 20 20 20 20 20 20 20 20 30 78 30 30 31 30  s         0x0010
1ad80 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1ad90 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1ada0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1adb0 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1adc0 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20 53 69    0x00200  /* Si
1add0 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1ade0 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1adf0 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1ae00 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1ae10 20 30 78 30 30 34 30 30 20 20 2f 2a 20 50 61 72   0x00400  /* Par
1ae20 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1ae30 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1ae40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1ae50 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78  aybeConvert   0x
1ae60 30 30 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  00800  /* Need c
1ae70 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1ae80 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1ae90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1aea0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1aeb0 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1aec0 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1aed0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1aee0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1aef0 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1af00 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1af10 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1af20 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1af30 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1af40 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1af50 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1af60 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1af70 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1af80 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1af90 20 20 20 20 20 20 30 78 30 38 30 30 30 20 20 2f        0x08000  /
1afa0 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1afb0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1afc0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1afd0 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1afe0 65 6e 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20  en  0x10000  /* 
1aff0 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1b000 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1b010 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
1b020 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
1b030 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
1b040 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
1b050 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
1b060 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
1b070 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1b080 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
1b090 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
1b0a0 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
1b0b0 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
1b0c0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1b0d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1b0e0 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
1b0f0 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20  porary index.** 
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
1b120 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
1b130 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1b140 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
1b150 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
1b160 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
1b170 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
1b180 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1b190 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
1b1a0 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
1b1b0 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
1b1c0 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
1b1d0 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
1b1e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
1b1f0 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
1b200 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
1b210 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
1b220 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
1b230 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
1b240 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1b260 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
1b270 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
1b280 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
1b290 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b2a0 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
1b2b0 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
1b2c0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
1b2d0 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1b2e0 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
1b2f0 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
1b300 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
1b310 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
1b320 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
1b330 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1b340 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
1b350 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
1b360 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
1b370 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
1b380 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
1b390 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
1b3a0 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
1b3b0 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
1b3c0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
1b3d0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
1b3e0 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
1b3f0 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
1b400 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
1b430 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1b440 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
1b450 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1b460 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
1b470 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1b480 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
1b490 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
1b4c0 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
1b4d0 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
1b4e0 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
1b4f0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
1b500 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
1b510 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1b520 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
1b550 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
1b560 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1b570 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
1b590 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
1b5a0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
1b5b0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
1b5c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b5d0 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
1b5e0 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
1b5f0 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
1b600 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
1b610 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
1b620 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
1b630 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1b640 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
1b650 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1b660 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
1b670 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
1b680 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
1b690 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
1b6c0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
1b6d0 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
1b6e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b6f0 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
1b700 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
1b710 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
1b720 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b740 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
1b750 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
1b760 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
1b770 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
1b780 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
1b790 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
1b7c0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
1b7d0 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
1b7e0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1b7f0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1b800 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
1b810 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1b820 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
1b830 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b840 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
1b850 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
1b860 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
1b870 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
1b8a0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
1b8b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
1b8c0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
1b8d0 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1b8e0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1b8f0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1b900 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1b910 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1b920 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1b930 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1b940 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1b950 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1b960 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1b970 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1b980 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b9a0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1b9b0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1b9c0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1b9f0 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1ba00 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1ba10 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1ba20 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1ba30 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1ba40 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1ba60 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1ba70 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1ba80 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1ba90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1baa0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1bab0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1bac0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1bad0 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1bb00 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1bb10 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1bb20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1bb30 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1bb40 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1bb50 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1bb60 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1bb90 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1bba0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1bbb0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbd0 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1bbe0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1bbf0 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1bc00 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1bc10 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1bc20 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1bc30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1bc40 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1bc50 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1bc60 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1bc70 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1bca0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1bcb0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1bcc0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1bcd0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1bce0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1bcf0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1bd00 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1bd10 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1bd20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1bd30 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1bd40 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1bd50 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1bd60 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1bd70 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1bd80 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1bd90 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1bda0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1bdb0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1bdc0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1bdd0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1bde0 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1bdf0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1be00 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1be10 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1be20 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1be30 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1be40 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1be50 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1be60 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1be70 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1be80 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1be90 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1bea0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1beb0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1bec0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1bed0 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1bee0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1bef0 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1bf00 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1bf10 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1bf20 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1bf30 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1bf40 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1bf50 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1bf60 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1bf70 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1bf80 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1bf90 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1bfa0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1bfb0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1bfc0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1bfd0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1bfe0 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1bff0 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1c000 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1c010 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1c020 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1c030 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1c040 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1c050 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1c060 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1c070 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1c080 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1c090 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1c0a0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1c0b0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1c0c0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1c0d0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1c0e0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1c0f0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1c100 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1c110 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1c120 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1c130 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1c140 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1c150 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1c160 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1c170 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1c180 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1c190 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1c1a0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1c1b0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1c1c0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1c1d0 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20  char affSdst;   
1c1e0 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1c1f0 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1c200 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
1c210 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1c220 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1c230 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1c240 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1c250 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1c260 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1c270 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1c280 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1c290 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1c2a0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1c2b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c2c0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1c2d0 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ated */.  ExprLi
1c2e0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
1c2f0 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
1c300 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
1c310 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
1c320 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
1c330 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
1c340 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
1c350 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
1c360 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
1c370 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  NT.** tables, th
1c380 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1c390 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1c3a0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1c3b0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1c3c0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1c3d0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1c3e0 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1c3f0 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1c400 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1c410 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1c420 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1c430 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1c440 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1c450 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1c460 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1c470 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72  e done within tr
1c480 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1c490 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1c4a0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1c4b0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1c4c0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1c4d0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1c4e0 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1c4f0 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1c500 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1c510 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1c520 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1c530 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1c540 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1c550 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1c560 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1c570 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1c580 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1c590 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1c5a0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1c5b0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1c5c0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1c5d0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1c5e0 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1c5f0 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1c600 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1c610 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1c620 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1c630 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1c640 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1c650 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1c660 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1c670 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1c680 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1c690 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1c6a0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1c6b0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1c6c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1c6d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1c6e0 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1c6f0 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67  or each.** trigg
1c700 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1c710 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1c720 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1c730 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1c740 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1c750 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1c760 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1c770 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1c780 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1c790 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1c7a0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1c7b0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1c7c0 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1c7d0 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1c7e0 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1c7f0 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1c800 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1c810 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1c820 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1c830 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1c840 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1c850 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1c860 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1c870 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1c880 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1c890 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1c8a0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1c8b0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1c8c0 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1c8d0 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1c8e0 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1c8f0 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1c900 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1c910 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1c920 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1c930 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1c940 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1c950 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1c960 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1c970 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1c980 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1c990 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1c9a0 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74  f INSERT.** stat
1c9b0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
1c9c0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
1c9d0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
1c9e0 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1c9f0 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
1ca00 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
1ca10 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
1ca20 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
1ca30 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
1ca40 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
1ca50 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
1ca60 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
1ca70 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
1ca80 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
1ca90 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
1caa0 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
1cab0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
1cac0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
1cad0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
1cae0 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
1caf0 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
1cb00 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
1cb10 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
1cb20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1cb30 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
1cb40 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
1cb50 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
1cb60 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
1cb70 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
1cb80 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
1cb90 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
1cba0 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
1cbb0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
1cbc0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1cbd0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
1cbe0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
1cbf0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1cc00 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b  ned char yDbMask
1cc10 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  [(SQLITE_MAX_ATT
1cc20 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64  ACHED+9)/8];.# d
1cc30 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1cc40 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28  (M,I)    (((M)[(
1cc50 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37  I)/8]&(1<<((I)&7
1cc60 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1cc70 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1cc80 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30      memset((M),0
1cc90 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65  ,sizeof(M)).# de
1cca0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1ccb0 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f  ,I)     (M)[(I)/
1ccc0 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29  8]|=(1<<((I)&7))
1ccd0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1cce0 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c  AllZero(M)   sql
1ccf0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1cd00 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62  o(M).# define Db
1cd10 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1cd20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41   (sqlite3DbMaskA
1cd30 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65  llZero(M)==0).#e
1cd40 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
1cd50 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
1cd60 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  sk;.# define DbM
1cd70 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1cd80 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b  (((M)&(((yDbMask
1cd90 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23  )1)<<(I)))!=0).#
1cda0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1cdb0 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30  ro(M)      (M)=0
1cdc0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1cdd0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1cde0 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  |=(((yDbMask)1)<
1cdf0 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44  <(I)).# define D
1ce00 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1ce10 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e    (M)==0.# defin
1ce20 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1ce30 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64  M)   (M)!=0.#end
1ce40 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
1ce50 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
1ce60 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
1ce70 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
1ce80 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
1ce90 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
1cea0 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
1ceb0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
1cec0 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
1ced0 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
1cee0 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
1cef0 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
1cf00 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
1cf10 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
1cf20 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
1cf30 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
1cf40 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
1cf50 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
1cf60 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
1cf70 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
1cf80 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
1cf90 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
1cfa0 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
1cfb0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
1cfc0 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
1cfd0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
1cfe0 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
1cff0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
1d000 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
1d010 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
1d020 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
1d030 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
1d040 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a  he shared-cache.
1d050 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1d060 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1d070 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1d080 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1d090 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1d0a0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1d0b0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1d0c0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1d0d0 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1d0e0 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1d0f0 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1d100 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1d110 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1d120 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1d130 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1d140 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1d150 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1d160 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1d170 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1d180 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1d190 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1d1a0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1d1b0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1d1c0 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1d1d0 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1d1e0 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1d1f0 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1d200 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1d210 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1d220 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1d230 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1d240 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1d250 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1d260 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1d270 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1d280 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1d290 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1d2a0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1d2b0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1d2c0 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1d2d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d2e0 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1d2f0 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1d300 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1d310 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1d320 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d330 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1d340 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1d350 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1d360 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1d370 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1d380 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1d390 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1d3a0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1d3b0 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1d3c0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1d3d0 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1d3e0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1d3f0 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1d400 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1d410 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1d420 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1d430 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1d440 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1d450 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1d460 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1d470 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64  stants */.  u8 d
1d480 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b  isableLookaside;
1d490 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
1d4a0 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61  mes lookaside ha
1d4b0 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  s been disabled 
1d4c0 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
1d4d0 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c  g[8];     /* Hol
1d4e0 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1d4f0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1d500 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  s */.  int nRang
1d510 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
1d520 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
1d530 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1d540 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
1d550 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1d560 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1d570 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
1d580 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1d590 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1d5a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d5b0 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
1d5c0 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
1d5d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d5e0 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
1d5f0 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
1d600 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
1d610 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
1d620 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
1d630 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
1d640 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1d650 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
1d660 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1d670 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  ets used so far 
1d680 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20  */.  int nOnce; 
1d690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d6a0 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69  ber of OP_Once i
1d6b0 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66  nstructions so f
1d6c0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
1d6d0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1d6e0 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
1d6f0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1d700 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1d710 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  t szOpAlloc;    
1d720 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d     /* Bytes of m
1d730 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f  emory space allo
1d740 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1d750 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46  Op[] */.  int iF
1d760 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f  ixedOp;        /
1d770 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74  * Never back out
1d780 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f   opcodes iFixedO
1d790 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a  p-1 or earlier *
1d7a0 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20  /.  int ckBase; 
1d7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1d7c0 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74   register of dat
1d7d0 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63  a during check c
1d7e0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
1d7f0 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20  int iSelfTab;   
1d800 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66       /* Table of
1d810 20 61 6e 20 69 6e 64 65 78 20 77 68 6f 73 65 20   an index whose 
1d820 65 78 70 72 73 20 61 72 65 20 62 65 69 6e 67 20  exprs are being 
1d830 63 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  coded */.  int i
1d840 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
1d850 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
1d860 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
1d870 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
1d880 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
1d890 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
1d8a0 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
1d8b0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
1d8c0 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
1d8d0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  ues */.  int nLa
1d8e0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
1d8f0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   Number of label
1d900 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
1d910 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20  *aLabel;        
1d920 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
1d930 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a  d the labels */.
1d940 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
1d950 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
1d960 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
1d970 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
1d980 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
1d990 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
1d9a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
1d9b0 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
1d9c0 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
1d9d0 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
1d9e0 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
1d9f0 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
1da00 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
1da10 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
1da20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
1da30 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
1da40 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
1da50 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
1da60 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1da70 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
1da80 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
1da90 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
1daa0 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
1dab0 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
1dac0 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
1dad0 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
1dae0 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
1daf0 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
1db00 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
1db10 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
1db20 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
1db30 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
1db40 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
1db50 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
1db60 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
1db70 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
1db80 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
1db90 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
1dba0 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
1dbb0 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
1dbc0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
1dbd0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
1dbe0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
1dbf0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
1dc00 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
1dc10 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
1dc20 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
1dc30 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49  cookieValue[SQLI
1dc40 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1dc50 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f  2];  /* Values o
1dc60 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72  f cookies to ver
1dc70 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ify */.  int reg
1dc80 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
1dc90 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1dca0 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
1dcb0 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
1dcc0 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
1dcd0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1dce0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
1dcf0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
1dd00 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
1dd10 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
1dd20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
1dd30 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
1dd40 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
1dd50 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66  b-program */.#if
1dd60 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1dd70 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65  BLED.  int nSele
1dd80 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ct;         /* N
1dd90 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20  umber of SELECT 
1dda0 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20  statements seen 
1ddb0 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  */.  int nSelect
1ddc0 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77  Indent;   /* How
1ddd0 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53   far to indent S
1dde0 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74  ELECTTRACE() out
1ddf0 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  put */.#endif.#i
1de00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1de10 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
1de20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
1de30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1de40 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
1de50 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
1de60 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
1de70 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
1de80 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
1de90 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1dea0 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
1deb0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
1dec0 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
1ded0 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
1dee0 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
1def0 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  */..  /* Informa
1df00 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20  tion used while 
1df10 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70  coding trigger p
1df20 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61  rograms. */.  Pa
1df30 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1df40 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1df50 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1df60 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1df70 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1df80 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1df90 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1dfa0 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1dfb0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1dfc0 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1dfd0 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1dfe0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f  teTable opcode o
1dff0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1e000 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1e010 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1e020 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1e030 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1e040 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1e050 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1e060 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1e070 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1e080 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1e090 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1e0a0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1e0b0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1e0c0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1e0d0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1e0e0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1e0f0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1e100 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1e110 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1e120 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1e130 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1e140 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1e150 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1e160 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1e170 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1e180 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1e190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1d0 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
1e1e0 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
1e1f0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
1e200 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
1e210 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
1e220 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
1e230 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
1e240 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
1e250 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
1e260 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
1e270 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
1e280 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73  of(Parse,nVar) s
1e290 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64  o the nVar field
1e2a0 20 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72   must be the fir
1e2b0 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e  st field.  ** in
1e2c0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1e2d0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1e2e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e2f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e320 2a 2f 0a 0a 20 20 79 6e 56 61 72 20 6e 56 61 72  */..  ynVar nVar
1e330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e340 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
1e350 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
1e360 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
1e370 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
1e380 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e390 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
1e3a0 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
1e3b0 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
1e3c0 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1e3d0 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1e3e0 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1e3f0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1e400 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e420 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
1e430 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
1e440 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
1e450 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e460 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1e470 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
1e480 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
1e490 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
1e4a0 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
1e4b0 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
1e4c0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
1e4d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e4e0 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
1e4f0 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
1e500 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69  endif.  int nAli
1e510 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
1e520 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
1e530 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65  liased result se
1e540 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69  t columns */.  i
1e550 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
1e560 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
1e570 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
1e580 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
1e590 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
1e5a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e5b0 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
1e5c0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
1e5d0 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
1e5e0 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
1e5f0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
1e600 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
1e610 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
1e620 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
1e630 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
1e640 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1e650 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a  #endif.  char **
1e660 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  azVar;          
1e670 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74     /* Pointers t
1e680 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d  o names of param
1e690 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  eters */.  Vdbe 
1e6a0 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
1e6b0 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
1e6c0 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
1e6d0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
1e6e0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1e6f0 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
1e700 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
1e710 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
1e720 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
1e730 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
1e740 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
1e750 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
1e760 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
1e770 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1e780 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
1e790 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
1e7a0 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
1e7b0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
1e7c0 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
1e7d0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
1e7e0 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
1e7f0 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
1e800 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
1e810 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  cks */.  Token s
1e820 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
1e830 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
1e840 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
1e850 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
1e860 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
1e870 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1e880 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
1e890 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
1e8a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1e8b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
1e8c0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
1e8d0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
1e8e0 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
1e8f0 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
1e900 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
1e910 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
1e920 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
1e930 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
1e940 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
1e950 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
1e960 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
1e970 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
1e980 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
1e990 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
1e9a0 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
1e9b0 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
1e9c0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
1e9d0 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
1e9e0 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  s */.  With *pWi
1e9f0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1ea00 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48   /* Current WITH
1ea10 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
1ea20 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1ea30 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20  hToFree;        
1ea40 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54  /* Free this WIT
1ea50 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  H object at the 
1ea60 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65  end of the parse
1ea70 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65   */.};../*.** Re
1ea80 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
1ea90 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
1eaa0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1eab0 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
1eac0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1ead0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1eae0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
1eaf0 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
1eb00 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
1eb10 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
1eb20 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61  arse->declareVta
1eb30 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  b).#endif../*.**
1eb40 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1eb50 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1eb60 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64  ructure can be d
1eb70 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61  eclared on a sta
1eb80 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ck and used.** t
1eb90 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65  o save the Parse
1eba0 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61  .zAuthContext va
1ebb0 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  lue so that it c
1ebc0 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c  an be restored l
1ebd0 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ater..*/.struct 
1ebe0 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20  AuthContext {.  
1ebf0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
1ec00 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50  hContext;   /* P
1ec10 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a  ut saved Parse.z
1ec20 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65  AuthContext here
1ec30 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
1ec40 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
1ec50 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73    /* The Parse s
1ec60 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a  tructure */.};..
1ec70 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66  /*.** Bitfield f
1ec80 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75  lags for P5 valu
1ec90 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63  e in various opc
1eca0 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
1ecb0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1ecc0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1ecd0 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20   OP_Insert: Set 
1ece0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1ecf0 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20  hange */.       
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ed20 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32   Also used in P2
1ed30 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f   (not P5) of OP_
1ed40 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e  Delete */.#defin
1ed50 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20  e OPFLAG_EPHEM  
1ed60 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1ed70 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68  * OP_Column: Eph
1ed80 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73  emeral output is
1ed90 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   ok */.#define O
1eda0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
1edb0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
1edc0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1edd0 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
1ede0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
1edf0 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
1ee00 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
1ee10 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
1ee20 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
1ee30 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
1ee40 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
1ee50 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
1ee60 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
1ee70 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ee80 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
1ee90 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
1eea0 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
1eeb0 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
1eec0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1eed0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
1eee0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
1eef0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1ef00 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
1ef10 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
1ef20 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
1ef30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1ef40 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
1ef50 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
1ef60 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
1ef70 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
1ef80 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
1ef90 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
1efa0 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
1efb0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
1efc0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
1efd0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
1efe0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
1eff0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
1f000 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
1f010 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
1f020 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
1f030 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
1f040 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1f050 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1f060 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
1f070 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1f080 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1f090 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1f0a0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1f0b0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1f0c0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1f0d0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1f0e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
1f0f0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
1f100 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
1f110 65 3a 20 6b 65 65 70 20 63 75 72 73 6f 72 20 70  e: keep cursor p
1f120 6f 73 69 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  osition */.#defi
1f130 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ne OPFLAG_AUXDEL
1f140 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20  ETE     0x04    
1f150 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e  /* OP_Delete: in
1f160 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20  dex in a DELETE 
1f170 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  op */../*. * Eac
1f180 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
1f190 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
1f1a0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
1f1b0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
1f1c0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
1f1d0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
1f1e0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
1f1f0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1f200 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
1f210 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
1f220 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
1f230 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
1f240 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
1f250 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
1f260 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
1f270 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
1f280 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
1f290 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
1f2a0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
1f2b0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
1f2c0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1f2d0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
1f2e0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
1f2f0 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
1f300 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
1f310 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
1f320 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
1f330 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
1f340 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
1f350 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
1f360 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
1f370 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
1f380 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
1f390 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
1f3a0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
1f3b0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
1f3c0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
1f3d0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1f3e0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
1f3f0 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
1f400 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
1f410 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
1f420 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
1f430 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
1f440 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
1f450 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1f460 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
1f470 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
1f480 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
1f490 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
1f4a0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
1f4b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
1f4c0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
1f4d0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
1f4e0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
1f4f0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1f500 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1f510 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1f520 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
1f530 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
1f540 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
1f550 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
1f560 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
1f570 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
1f580 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
1f590 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f5a0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1f5b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
1f5c0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
1f5d0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
1f5e0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
1f5f0 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
1f600 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
1f610 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
1f640 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
1f650 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
1f660 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1f670 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
1f680 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1f690 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
1f6a0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
1f6b0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1f6c0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
1f6d0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
1f6e0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
1f6f0 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
1f700 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
1f710 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
1f720 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
1f730 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1f740 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
1f750 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1f760 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
1f770 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
1f780 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
1f790 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
1f7a0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
1f7b0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
1f7c0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
1f7d0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
1f7e0 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
1f7f0 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
1f800 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
1f810 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
1f820 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
1f830 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
1f840 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
1f850 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
1f860 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
1f870 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
1f880 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
1f890 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
1f8a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
1f8b0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1f8c0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
1f8d0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
1f8e0 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
1f8f0 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
1f900 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
1f910 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
1f920 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1f930 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
1f940 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
1f950 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
1f960 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
1f970 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
1f980 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
1f990 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1f9a0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
1f9b0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
1f9c0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
1f9d0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
1f9e0 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
1f9f0 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
1fa00 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
1fa10 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
1fa20 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
1fa30 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1fa40 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1fa50 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1fa60 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1fa70 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1fa80 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1fa90 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1faa0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1fab0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1fac0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
1fad0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
1fae0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1faf0 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
1fb00 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
1fb10 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
1fb20 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
1fb30 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
1fb40 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1fb50 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
1fb60 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1fb70 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1fb80 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
1fb90 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
1fba0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1fbb0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1fbc0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1fbd0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1fbe0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
1fbf0 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
1fc00 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
1fc10 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1fc20 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
1fc30 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1fc40 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1fc50 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1fc60 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
1fc70 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
1fc80 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
1fc90 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
1fca0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1fcb0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
1fcc0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
1fcd0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1fce0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1fcf0 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1fd00 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1fd10 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1fd20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1fd30 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1fd40 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
1fd50 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1fd60 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1fd70 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
1fd80 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
1fd90 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1fda0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
1fdb0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
1fdc0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1fdd0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1fde0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1fdf0 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
1fe00 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
1fe10 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1fe20 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1fe30 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1fe40 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
1fe50 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1fe60 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
1fe70 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1fe80 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1fe90 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1fea0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1feb0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1fec0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
1fed0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
1fee0 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
1fef0 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
1ff00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1ff10 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
1ff20 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
1ff30 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
1ff40 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
1ff50 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
1ff60 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
1ff70 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
1ff80 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1ff90 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1ffa0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
1ffb0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
1ffc0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
1ffd0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
1ffe0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
1fff0 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
20000 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
20010 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
20020 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
20030 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
20040 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
20050 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
20060 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
20070 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
20080 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
20090 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
200a0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
200b0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
200c0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
200d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
200e0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
200f0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
20100 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
20110 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
20120 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
20130 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
20140 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
20150 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
20160 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
20170 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
20180 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
20190 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
201a0 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
201b0 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
201c0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
201d0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
201e0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
201f0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
20200 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
20210 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
20220 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
20230 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
20240 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
20250 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
20260 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
20270 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
20280 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
20290 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
202a0 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
202b0 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
202c0 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
202d0 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
202e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
202f0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
20300 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
20310 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
20320 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
20330 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
20340 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
20350 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
20360 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
20370 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
20380 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
20390 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
203a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
203b0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
203c0 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
203d0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
203e0 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
203f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
20400 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
20410 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
20420 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
20430 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
20440 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
20450 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
20460 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
20470 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
20480 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
20490 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
204a0 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
204b0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
204c0 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
204d0 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
204e0 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
204f0 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
20500 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
20510 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
20520 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
20530 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
20540 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
20550 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
20560 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
20570 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
20580 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61           /* A ba
20590 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  se allocation.  
205a0 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e  Not from malloc.
205b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
205c0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
205d0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
205e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
205f0 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
20600 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
20610 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
20620 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c  ar */.  u32  nAl
20630 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
20640 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
20650 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
20660 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41  xt */.  u32  mxA
20670 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
20680 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
20690 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66  allocation.  0 f
206a0 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61  or no malloc usa
206b0 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ge */.  u8   acc
206c0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
206d0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
206e0 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
206f0 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
20700 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
20710 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
20720 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
20730 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
20740 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
20750 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
20760 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c  G  2.#define SQL
20770 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
20780 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
20790 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
207a0 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
207b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
207c0 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
207d0 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
207e0 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
207f0 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
20800 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
20810 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
20820 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
20830 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
20840 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
20850 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
20860 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
20870 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
20880 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
20890 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
208a0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
208b0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
208c0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
208d0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
208e0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
208f0 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
20900 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
20910 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
20920 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
20930 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
20940 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
20950 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
20960 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
20970 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
20980 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
20990 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
209a0 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
209b0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
209c0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
209d0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
209e0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
209f0 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
20a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20a10 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
20a20 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
20a30 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
20a40 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
20a50 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
20a60 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
20a70 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
20a80 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
20a90 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
20aa0 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
20ab0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
20ac0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
20ad0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
20ae0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20b00 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
20b10 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
20b20 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
20b30 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
20b40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
20b50 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
20b60 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
20b70 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20b90 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
20ba0 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
20bb0 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
20be0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
20bf0 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
20c00 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
20c30 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
20c40 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
20c50 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
20c80 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
20c90 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
20cc0 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
20cd0 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
20ce0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
20cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
20d00 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
20d10 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
20d20 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
20d50 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
20d60 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d  nt */.  int nStm
20d70 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20  tSpill;         
20d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d            /* Stm
20d90 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d  t-journal spill-
20da0 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c  to-disk threshol
20db0 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  d */.  sqlite3_m
20dc0 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
20dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
20de0 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
20df0 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
20e00 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
20e10 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
20e20 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
20e30 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
20e40 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
20e50 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
20e60 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
20e70 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
20e80 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
20e90 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20eb0 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
20ec0 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
20ed0 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ef0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
20f00 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
20f10 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20f30 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
20f40 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
20f50 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
20f60 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
20f70 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
20f80 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
20f90 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
20fa0 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
20fc0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
20fd0 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
20fe0 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21000 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
21010 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
21020 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
21030 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
21040 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
21050 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
21060 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21080 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
21090 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
210a0 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
210d0 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
210e0 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21100 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
21110 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
21120 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
21130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21140 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21150 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
21160 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
21170 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
21180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
21190 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
211a0 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
211b0 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
211c0 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
211d0 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
211e0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
211f0 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
21200 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
21230 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
21240 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
21250 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
21260 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
21270 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
21280 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
21290 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
212a0 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
212b0 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
212e0 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
212f0 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
21300 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
21310 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
21320 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21330 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
21340 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
21350 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
21360 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
21370 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21380 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
21390 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
213a0 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
213b0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
213c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
213d0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
213e0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
213f0 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
21420 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
21430 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
21440 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
21450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21460 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
21470 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
21480 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
21490 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
214a0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
214b0 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
214c0 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
214d0 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
214e0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
214f0 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
21500 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
21510 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
21540 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
21550 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
21560 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
21570 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
21580 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
21590 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
215a0 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
215b0 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
215c0 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
215d0 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
215e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
215f0 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
21600 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
21610 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
21620 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
21630 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
21640 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
21650 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
21660 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
21670 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
21680 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
21690 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
216a0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
216b0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
216c0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
216d0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216f0 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
21700 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
21710 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21720 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
21730 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
21740 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
21750 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
21760 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
21770 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
21780 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
21790 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
217a0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
217b0 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
217c0 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
217d0 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
217e0 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
217f0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
21800 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
21810 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
21820 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
21830 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
21840 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
21850 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
21860 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
21870 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
21880 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
21890 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
218a0 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
218b0 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
218c0 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
218d0 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
218e0 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
218f0 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
21900 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
21910 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
21920 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
21930 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
21940 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
21950 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
21960 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
21970 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
21980 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
21990 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
219a0 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
219b0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
219c0 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
219d0 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
219e0 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
219f0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
21a00 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
21a10 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
21a20 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
21a30 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
21a40 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
21a50 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
21a60 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
21a70 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
21a80 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65  Walker {.  Parse
21a90 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ab0 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
21ac0 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
21ad0 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
21ae0 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
21af0 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
21b00 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
21b10 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
21b20 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
21b30 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
21b40 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
21b50 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
21b60 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61  void (*xSelectCa
21b70 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a  llback2)(Walker*
21b80 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63  ,Select*);/* Sec
21b90 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ond callback for
21ba0 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e   SELECTs */.  in
21bb0 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21be0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
21bf0 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21c20 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
21c30 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
21c40 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
21c70 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
21c80 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
21c90 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
21cc0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
21cd0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
21d00 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
21d10 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
21d40 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
21d50 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
21d60 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21d80 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
21d90 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
21da0 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
21db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21dc0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
21dd0 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
21de0 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
21df0 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21e10 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
21e20 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
21e30 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
21e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21e60 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
21e70 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 7d 20 75  indexes */.  } u
21e80 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
21e90 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
21ea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
21eb0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
21ec0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
21ed0 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
21ee0 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
21ef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
21f00 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
21f10 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
21f20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
21f30 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
21f40 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
21f50 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
21f60 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
21f70 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
21f80 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61  3ExprWalkNoop(Wa
21f90 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a  lker*, Expr*);..
21fa0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
21fb0 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
21fc0 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
21fd0 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
21fe0 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
21ff0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
22000 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
22010 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
22020 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
22030 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
22040 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
22050 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
22060 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
22070 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
22080 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
22090 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
220a0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
220b0 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
220c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
220d0 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
220e0 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
220f0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
22100 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
22110 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
22120 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
22130 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
22140 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
22150 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
22180 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
22190 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
221a0 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
221c0 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
221d0 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
221e0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
221f0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
22200 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
22210 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
22220 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
22230 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
22240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22250 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
22260 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
22270 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22290 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
222a0 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
222b0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
222c0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
222f0 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
22300 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
22310 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20  *zCteErr;       
22320 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
22330 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
22340 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
22350 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
22360 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
22370 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
22380 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
22390 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
223a0 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
223b0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
223c0 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
223d0 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
223e0 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
223f0 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
22400 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
22410 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
22420 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
22430 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
22440 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
22450 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
22460 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
22470 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
22480 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
22490 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
224a0 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
224b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
224c0 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  G */../*.** Assu
224d0 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
224e0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
224f0 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
22500 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
22510 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
22520 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
22530 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
22540 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
22550 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22560 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
22570 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
22580 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
22590 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
225a0 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225c0 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
225d0 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
225e0 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
225f0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
22640 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
22650 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
22660 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
22670 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
22680 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
22690 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
226a0 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
226b0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
226c0 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
226d0 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
226e0 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
226f0 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
22700 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
22710 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
22720 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
22730 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
22740 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
22750 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
22760 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
22770 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
22780 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
22790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
227a0 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
227b0 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
227c0 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
227d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
227e0 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
227f0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
22800 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
22810 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
22820 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
22830 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
22840 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
22850 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
22860 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
22870 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
22880 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
22890 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
228a0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
228b0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
228c0 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
228d0 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
228e0 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
228f0 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
22900 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
22910 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
22920 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
22930 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
22940 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65  (__LINE__).#else
22950 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22960 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
22970 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  TE_NOMEM.# defin
22980 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
22990 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45  OMEM_BKPT SQLITE
229a0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 65 6e  _IOERR_NOMEM.#en
229b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20  dif../*.** FTS3 
229c0 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65  and FTS4 both re
229d0 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61  quire virtual ta
229e0 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23  ble support.*/.#
229f0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
22a00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
22a10 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  BLE).# undef SQL
22a20 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
22a30 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
22a40 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69  NABLE_FTS4.#endi
22a50 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  f../*.** FTS4 is
22a60 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
22a70 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
22a80 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
22a90 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
22aa0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
22ab0 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
22ac0 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
22ad0 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
22ae0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
22af0 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
22b00 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
22b10 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
22b20 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
22b30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
22b40 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
22b50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
22b60 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
22b70 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
22b80 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
22b90 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
22ba0 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
22bb0 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
22bc0 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
22bd0 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
22be0 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
22bf0 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
22c00 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
22c10 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
22c20 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
22c30 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
22c40 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
22c50 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
22c60 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
22c70 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
22c80 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
22c90 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
22ca0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
22cb0 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
22cc0 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
22cd0 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
22ce0 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
22cf0 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
22d00 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
22d10 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
22d20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
22d30 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
22d40 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
22d50 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
22d60 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
22d70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
22d80 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
22d90 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
22da0 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
22db0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
22dc0 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
22dd0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22de0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
22df0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
22e00 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22e10 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
22e20 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
22e30 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
22e40 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
22e50 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
22e60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22e70 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
22e80 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
22e90 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22ea0 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
22eb0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
22ec0 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
22ed0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
22ee0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
22ef0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22f00 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
22f10 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
22f20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22f30 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
22f40 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
22f50 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
22f60 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
22f70 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
22f80 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22f90 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
22fa0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
22fb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
22fc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22fd0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
22fe0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
22ff0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
23000 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
23010 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
23020 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23030 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23040 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
23050 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
23060 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
23070 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
23080 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
23090 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
230a0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
230b0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
230c0 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
230d0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
230e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
230f0 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
23100 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
23110 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23 69  r)(x)).#endif.#i
23120 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23130 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
23140 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65  DIAGS.int sqlite
23150 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23  3IsIdChar(u8);.#
23160 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
23170 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
23180 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74  rototypes.*/.int
23190 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
231a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
231b0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
231c0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
231d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 6f 6e 73  nst char*);.cons
231e0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  t char *sqlite3S
231f0 74 72 4e 65 78 74 28 63 6f 6e 73 74 20 63 68 61  trNext(const cha
23200 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
23210 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
23220 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
23230 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
23240 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
23250 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
23260 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
23270 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
23280 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23290 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
232a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
232b0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
232c0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
232d0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
232e0 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
232f0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
23300 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73  3DbMallocRawNN(s
23310 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
23320 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
23330 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
23340 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
23350 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
23360 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
23370 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76  t char*, u64);.v
23380 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
23390 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
233a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
233b0 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
233c0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
233d0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
233e0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
233f0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
23400 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
23410 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
23420 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
23430 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
23440 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
23450 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
23460 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
23470 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
23480 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69  3ScratchMalloc(i
23490 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
234a0 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69  3ScratchFree(voi
234b0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
234c0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
234d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
234e0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
234f0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
23500 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
23510 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23520 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
23530 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  T.void sqlite3Be
23540 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
23550 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
23560 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
23570 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
23580 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
23590 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
235a0 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
235b0 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
235c0 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
235d0 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
235e0 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
235f0 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
23600 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
23610 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
23620 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
23630 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
23640 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
23650 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
23660 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
23670 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
23680 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
23690 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
236a0 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
236b0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
236c0 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
236d0 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
236e0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
236f0 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
23700 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
23710 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
23720 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
23730 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
23740 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
23750 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
23760 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
23770 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
23780 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
23790 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
237a0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
237b0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
237c0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
237d0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
237e0 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
237f0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
23800 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
23810 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
23820 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
23830 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
23840 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
23850 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
23860 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
23870 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
23880 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
23890 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
238a0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
238b0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
238c0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
238d0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
238e0 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
238f0 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  ;.#endif...#ifnd
23900 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
23910 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OMIT.  sqlite3_m
23920 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
23930 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75  st *sqlite3Defau
23940 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  ltMutex(void);. 
23950 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
23960 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
23970 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
23980 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
23990 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
239a0 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
239b0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
239c0 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
239d0 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
239e0 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
239f0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
23a00 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
23a10 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
23a20 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a  ITE_MUTEX_NOOP).
23a30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
23a40 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64  moryBarrier(void
23a50 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
23a60 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  e sqlite3MemoryB
23a70 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a  arrier().#endif.
23a80 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
23a90 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
23aa0 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
23ab0 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74  ite3StatusUp(int
23ac0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23ad0 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69  ite3StatusDown(i
23ae0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23af0 71 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68  qlite3StatusHigh
23b00 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b  water(int, int);
23b10 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
23b20 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
23b30 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
23b40 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
23b50 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
23b60 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
23b70 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
23b80 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
23b90 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  oid);..#ifndef S
23ba0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
23bb0 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
23bc0 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
23bd0 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
23be0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
23bf0 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
23c00 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
23c10 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
23c20 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
23c30 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
23c40 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
23c50 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
23c60 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
23c70 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
23c80 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
23c90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
23ca0 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
23cb0 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
23cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
23cd0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
23ce0 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
23cf0 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
23d00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
23d10 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
23d20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
23d30 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
23d40 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
23d50 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
23d60 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  ;..void sqlite3V
23d70 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
23d80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
23d90 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73  va_list);.void s
23da0 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
23db0 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
23dc0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
23dd0 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
23de0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
23df0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
23e00 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
23e10 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
23e20 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
23e30 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
23e40 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
23e50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
23e60 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20  AVE_OS_TRACE).  
23e70 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
23e80 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
23e90 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
23ea0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
23eb0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
23ec0 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
23ed0 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
23ee0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
23ef0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
23f00 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
23f10 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
23f20 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
23f30 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
23f40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
23f50 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
23f60 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
23f70 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
23f80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
23f90 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
23fa0 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
23fb0 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
23fc0 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  t*, u8);.  void 
23fd0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
23fe0 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ith(TreeView*, c
23ff0 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b  onst With*, u8);
24000 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73  .#endif...void s
24010 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
24020 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33  char **, sqlite3
24030 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
24040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
24050 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
24060 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
24070 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75  .int sqlite3Dequ
24080 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64  ote(char*);.void
24090 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69   sqlite3TokenIni
240a0 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b  t(Token*,char*);
240b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
240c0 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
240d0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
240e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
240f0 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
24100 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
24110 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
24120 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
24130 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
24140 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
24150 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
24160 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
24170 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
24180 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
24190 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
241a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
241b0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
241c0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
241d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
241e0 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
241f0 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20  e(Parse*);.Expr 
24200 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
24210 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
24220 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
24230 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24240 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
24250 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
24260 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
24270 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
24280 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
24290 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
242a0 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
242b0 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
242c0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
242d0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
242e0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
242f0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
24300 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
24310 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
24320 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
24330 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24340 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
24350 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
24360 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
24370 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
24380 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
24390 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
243a0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
243b0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
243c0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
243d0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
243e0 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70  SetSortOrder(Exp
243f0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  rList*,int);.voi
24400 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
24410 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
24420 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
24430 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
24440 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
24450 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
24460 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
24470 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24480 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
24490 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
244a0 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
244b0 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
244c0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
244d0 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
244e0 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
244f0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
24500 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
24510 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
24520 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24530 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
24540 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
24550 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
24560 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
24570 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
24580 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
24590 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
245a0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
245b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
245c0 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
245d0 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
245e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
245f0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
24600 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
24610 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
24620 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71  teColumnNames(sq
24630 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a  lite3*,Table*);.
24640 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  int sqlite3Colum
24650 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  nsFromExprList(P
24660 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
24670 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a  i16*,Column**);.
24680 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
24690 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
246a0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
246b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
246c0 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
246d0 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
246e0 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
246f0 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
24700 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
24710 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
24720 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
24730 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
24740 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24750 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
24760 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
24770 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
24780 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
24790 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
247a0 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
247b0 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
247c0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
247d0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
247e0 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
247f0 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
24800 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
24810 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
24820 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24830 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
24840 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
24850 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
24860 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
24870 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
24880 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
24890 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
248a0 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
248b0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
248c0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
248d0 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
248e0 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
248f0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
24900 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
24910 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
24920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
24930 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
24940 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
24950 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
24960 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
24970 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
24980 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
24990 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
249a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
249b0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
249c0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
249d0 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
249e0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
249f0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
24a00 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
24a10 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20  rse *);..#ifdef 
24a20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
24a30 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e  TIN_TEST.# defin
24a40 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
24a50 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
24a60 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
24a70 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
24a80 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
24a90 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
24aa0 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
24ab0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
24ac0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
24ad0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
24ae0 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
24af0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
24b00 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
24b10 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
24b20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
24b30 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
24b40 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
24b50 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
24b60 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
24b70 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
24b80 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
24b90 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
24ba0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
24bb0 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  ST.int sqlite3Bi
24bc0 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
24bd0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69  int,int*);.#endi
24be0 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  f..RowSet *sqlit
24bf0 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
24c00 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e  ite3*, void*, un
24c10 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69  signed int);.voi
24c20 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
24c30 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76  lear(RowSet*);.v
24c40 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
24c50 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
24c60 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
24c70 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
24c80 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
24c90 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
24ca0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
24cb0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
24cc0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
24cd0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
24ce0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
24cf0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
24d00 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
24d10 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
24d20 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
24d30 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24d40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24d50 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
24d60 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
24d70 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
24d80 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
24d90 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
24da0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
24db0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
24dc0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
24dd0 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
24de0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
24df0 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
24e00 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
24e10 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
24e20 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
24e30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24e40 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
24e50 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
24e60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24e70 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
24e80 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
24e90 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  le*);.#ifndef SQ
24ea0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
24eb0 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
24ec0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
24ed0 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
24ee0 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
24ef0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
24f00 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
24f10 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
24f20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
24f30 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
24f40 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
24f50 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
24f60 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76  tEnd(X).#endif.v
24f70 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
24f80 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
24f90 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
24fa0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
24fb0 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
24fc0 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
24fd0 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
24fe0 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
24ff0 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
25000 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
25010 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
25020 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
25030 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
25040 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
25050 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
25060 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
25070 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
25080 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
25090 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
250a0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
250b0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
250c0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
250d0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
250e0 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
250f0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
25100 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
25110 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25130 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
25140 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
25150 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
25160 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
25170 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
25180 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
25190 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
251a0 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
251b0 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
251c0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
251d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
251e0 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
251f0 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
25200 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
25210 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
25220 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
25230 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
25240 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
25250 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
25260 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
25270 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
25280 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
25290 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
252a0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
252b0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
252c0 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
252d0 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
252e0 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
252f0 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
25300 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
25310 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
25320 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
25330 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
25340 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
25350 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
25370 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
25380 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
25390 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
253a0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
253b0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
253c0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
253d0 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
253e0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
253f0 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
25400 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
25410 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
25420 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25430 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
25440 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45  ,ExprList*,u32,E
25450 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
25460 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
25470 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
25480 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
25490 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
254a0 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
254b0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
254c0 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
254d0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
254e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
254f0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
25500 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
25510 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
25520 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
25530 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
25540 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
25550 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
25560 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
25570 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
25580 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
25590 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
255a0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
255b0 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
255c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
255d0 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
255e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
255f0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25600 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
25610 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
25620 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
25630 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
25640 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
25650 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
25660 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
25670 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
25680 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25690 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
256a0 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20  eInfo*);.LogEst 
256b0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70  sqlite3WhereOutp
256c0 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65  utRowCount(Where
256d0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
256e0 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
256f0 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ct(WhereInfo*);.
25700 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
25710 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49  IsOrdered(WhereI
25720 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
25730 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
25740 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
25750 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
25760 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
25770 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
25780 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
25790 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
257a0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
257b0 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
257c0 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65  nfo*, int*);.#de
257d0 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46  fine ONEPASS_OFF
257e0 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f        0        /
257f0 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53  * Use of ONEPASS
25800 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a   not allowed */.
25810 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
25820 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20  SINGLE   1      
25830 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c    /* ONEPASS val
25840 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  id for a single 
25850 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64  row update */.#d
25860 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55  efine ONEPASS_MU
25870 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20  LTI    2        
25880 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61  /* ONEPASS is va
25890 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lid for multiple
258a0 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71   rows */.void sq
258b0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61  lite3ExprCodeLoa
258c0 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72  dIndexColumn(Par
258d0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
258e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
258f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
25900 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
25910 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
25920 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
25930 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
25940 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67  deGetColumnToReg
25950 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
25960 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
25970 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25980 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
25990 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
259a0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
259b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
259c0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
259d0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
259e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
259f0 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
25a00 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
25a10 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25a20 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
25a30 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
25a40 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
25a50 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
25a60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
25a70 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
25a80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25a90 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
25aa0 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
25ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25ac0 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
25ad0 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
25ae0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25af0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
25b00 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
25b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25b20 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
25b30 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
25b40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25b50 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
25b60 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
25b70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25b80 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
25b90 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
25ba0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
25bb0 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
25bc0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
25bd0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
25be0 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
25bf0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
25c00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25c10 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
25c20 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
25c30 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25c40 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
25c50 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
25c60 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
25c70 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
25c80 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
25c90 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
25ca0 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
25cb0 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
25cc0 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
25cd0 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
25ce0 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
25cf0 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
25d00 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
25d10 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
25d20 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
25d30 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
25d40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25d50 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
25d60 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
25d70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25d80 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
25d90 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
25da0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25db0 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
25dc0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
25dd0 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
25de0 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
25df0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25e00 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25e10 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
25e20 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
25e30 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
25e40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25e50 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
25e60 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
25e70 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
25e80 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
25e90 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
25ea0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
25eb0 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
25ec0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25ed0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
25ee0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
25ef0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
25f00 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
25f10 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25f20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
25f30 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
25f40 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
25f50 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25f60 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
25f70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
25f80 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
25f90 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
25fa0 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
25fb0 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
25fc0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
25fd0 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
25fe0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
25ff0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
26000 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
26010 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
26020 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
26030 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
26040 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
26050 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
26060 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
26070 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
26080 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
26090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
260a0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
260b0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
260c0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
260d0 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
260e0 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
260f0 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
26100 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
26110 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
26120 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
26130 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
26140 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
26150 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
26160 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
26170 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
26180 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26190 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
261a0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
261b0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
261c0 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
261d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
261e0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
261f0 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
26200 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
26210 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
26220 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
26230 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
26240 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
26250 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
26260 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
26270 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
26280 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
26290 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
262a0 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
262b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
262c0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
262d0 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
262e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
262f0 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
26300 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
26310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26320 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
26330 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26340 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
26350 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
26360 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
26370 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
26380 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
26390 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
263a0 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
263b0 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
263c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
263d0 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
263e0 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
263f0 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
26400 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
26410 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
26420 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
26430 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
26440 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
26450 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
26460 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
26470 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
26480 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
26490 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
264a0 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
264b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
264c0 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
264d0 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
264e0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
264f0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
26500 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
26510 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
26520 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
26530 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
26540 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
26550 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
26560 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
26570 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
26580 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
26590 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
265a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
265b0 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
265c0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
265d0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
265e0 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
265f0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
26600 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
26610 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26630 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
26640 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  8,int,int*,int*)
26650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26660 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
26670 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
26680 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
26690 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
266a0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
266b0 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
266c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
266d0 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69   u8, int, u8*, i
266e0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
266f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
26700 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
26710 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
26720 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
26730 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
26740 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
26750 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
26760 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
26770 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
26780 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
26790 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
267a0 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
267b0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
267c0 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
267d0 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
267e0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
267f0 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
26800 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
26810 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
26820 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
26830 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
26840 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
26850 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
26860 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
26870 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
26880 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
26890 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
268a0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
268b0 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
268c0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
268d0 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
268e0 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69  Select*,int);.#i
268f0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
26900 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74  ABLED.void sqlit
26910 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
26920 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68  Select*,const ch
26930 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
26940 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
26950 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23  ctSetName(A,B).#
26960 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26970 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46  e3InsertBuiltinF
26980 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e  uncs(FuncDef*,in
26990 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  t);.FuncDef *sql
269a0 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
269b0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
269c0 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29  char*,int,u8,u8)
269d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
269e0 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
269f0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
26a00 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
26a10 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
26a20 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
26a30 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50  sqlite3RegisterP
26a40 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c  erConnectionBuil
26a50 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
26a60 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
26a70 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
26a80 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
26a90 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
26aa0 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
26ab0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
26ac0 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
26ad0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
26ae0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26af0 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
26b00 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26b10 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
26b20 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
26b30 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
26b40 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
26b50 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23   int);.#endif..#
26b60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26b70 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
26b80 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
26b90 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
26ba0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
26bb0 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
26bc0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
26bf0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26c00 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
26c10 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
26c20 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
26c30 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
26c40 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
26c50 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
26c60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
26c70 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
26c80 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
26c90 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
26ca0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
26cb0 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
26cc0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
26cd0 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
26ce0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
26cf0 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
26d00 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
26d10 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
26d20 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
26d30 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
26d40 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
26d50 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
26d80 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
26d90 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
26da0 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
26db0 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
26dc0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
26dd0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
26de0 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
26df0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
26e00 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
26e10 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
26e20 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
26e30 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
26e40 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
26e50 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
26e60 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
26e70 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
26e80 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e3*,Select*);.  
26e90 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
26ea0 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
26eb0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
26ec0 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ef0 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
26f00 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
26f10 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
26f20 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
26f30 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
26f40 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
26f50 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
26f60 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
26f70 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
26f80 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
26f90 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
26fa0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
26fb0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
26fc0 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
26fd0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
26fe0 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
26ff0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
27000 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
27010 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
27020 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
27030 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
27040 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
27050 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27060 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
27070 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
27080 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
27090 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69  el : (p)).# defi
270a0 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
270b0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
270c0 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73  oplevel==0).#els
270d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
270e0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
270f0 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
27100 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
27110 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
27120 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27130 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
27140 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
27150 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
27160 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
27170 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27180 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
27190 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
271a0 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
271b0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
271c0 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
271d0 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
271e0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
271f0 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
27200 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
27210 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
27220 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
27230 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64  oplevel(p) 1.# d
27240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
27250 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
27260 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
27270 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
27280 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
27290 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
272a0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
272b0 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
272c0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
272d0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
272e0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
272f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
27300 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
27310 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
27320 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27330 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
27340 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
27350 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
27360 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
27370 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
27380 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
27390 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
273a0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
273b0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
273c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
273d0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
273e0 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
273f0 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
27400 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
27410 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
27420 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
27430 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
27440 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
27450 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
27460 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
27470 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
27480 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
27490 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
274a0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
274b0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
274c0 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
274d0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
274e0 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
274f0 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
27500 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
27510 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
27520 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
27530 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
27540 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
27550 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
27560 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
27570 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
27580 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
27590 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
275a0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
275b0 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
275c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
275d0 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
275e0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
275f0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
27600 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
27610 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
27620 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
27630 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
27640 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
27650 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
27660 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
27670 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
27680 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
27690 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
276a0 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
276b0 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
276c0 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
276d0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
276e0 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
276f0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
27700 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
27710 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
27720 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
27730 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
27740 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
27750 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
27760 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
27770 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
27780 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
27790 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
277a0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
277b0 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
277c0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
277d0 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
277e0 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
277f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27800 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
27810 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
27820 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
27830 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
27840 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
27850 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
27860 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
27870 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
27880 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29  _STAT3_OR_STAT4)
27890 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
278a0 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e  d(SQLITE_EXPLAIN
278b0 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29  _ESTIMATED_ROWS)
278c0 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
278d0 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
278e0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
278f0 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
27900 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
27910 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
27920 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
27930 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
27940 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
27950 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
27960 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
27970 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
27980 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
27990 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
279a0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
279b0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
279c0 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
279d0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
279e0 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
279f0 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
27a00 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
27a10 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
27a20 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
27a30 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
27a40 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
27a50 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
27a60 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
27a70 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
27a80 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
27a90 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
27aa0 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
27ab0 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
27ac0 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
27ad0 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
27ae0 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
27af0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
27b00 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
27b10 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
27b20 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
27b30 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
27b40 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
27b50 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
27b60 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
27b70 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
27b80 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
27b90 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
27ba0 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
27bb0 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
27bc0 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
27bd0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
27be0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
27bf0 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
27c00 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
27c10 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
27c20 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
27c30 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
27c40 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64  tr(sqlite3*, Ind
27c50 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
27c60 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28  e3TableAffinity(
27c70 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
27c80 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
27c90 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
27ca0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
27cb0 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
27cc0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
27cd0 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
27ce0 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
27cf0 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
27d00 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
27d10 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
27d20 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
27d30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
27d40 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
27d50 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
27d60 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
27d70 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
27d80 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
27d90 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
27da0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
27db0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27dc0 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
27dd0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
27de0 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
27df0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
27e00 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
27e10 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
27e20 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
27e30 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
27e40 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
27e50 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
27e60 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
27e70 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
27e80 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
27e90 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
27ea0 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
27eb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
27ec0 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
27ed0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
27ee0 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
27ef0 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
27f00 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
27f10 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
27f20 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
27f30 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
27f40 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
27f50 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
27f60 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
27f70 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
27f80 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
27f90 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
27fa0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
27fb0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
27fc0 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
27fd0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
27fe0 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
27ff0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
28000 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
28010 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
28020 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
28030 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
28040 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
28050 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
28060 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
28070 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
28080 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
28090 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
280a0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
280b0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
280c0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
280d0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
280e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
280f0 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
28100 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
28110 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
28120 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
28130 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
28140 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
28150 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
28160 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28170 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
28180 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
28190 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
281a0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
281b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
281c0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
281d0 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
281e0 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
281f0 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
28200 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
28210 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
28220 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
28230 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
28240 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
28250 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
28260 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
28270 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
28280 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
28290 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20   void *,u8,.    
282a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282b0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
282c0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
282d0 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
282e0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
282f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
28300 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
28310 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
28320 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
28330 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
28340 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
28350 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
28360 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
28370 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
28380 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
28390 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
283a0 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
283b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
283c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
283d0 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
283e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
283f0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
28400 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
28410 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
28420 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
28430 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
28440 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
28450 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74  const char sqlit
28460 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65  e3StrBINARY[];.e
28470 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
28480 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
28490 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b  3UpperToLower[];
284a0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
284b0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
284c0 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65  te3CtypeMap[];.e
284d0 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65  xtern const Toke
284e0 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65  n sqlite3IntToke
284f0 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c  ns[];.extern SQL
28500 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53  ITE_WSD struct S
28510 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c  qlite3Config sql
28520 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65  ite3Config;.exte
28530 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  rn FuncDefHash s
28540 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e  qlite3BuiltinFun
28550 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
28560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
28570 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
28580 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
28590 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
285a0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
285b0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
285c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
285d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
285e0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
285f0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
28600 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
28610 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
28620 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
28630 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
28640 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
28650 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28660 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
28670 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
28680 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
28690 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
286a0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
286b0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
286c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
286d0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
286e0 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
286f0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
28700 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
28710 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
28720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28730 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
28740 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
28750 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
28760 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e  qlite3SelectWron
28770 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50  gNumTermsError(P
28780 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65  arse *pParse, Se
28790 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71  lect *p);.int sq
287a0 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
287b0 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
287c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
287d0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
287e0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
287f0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
28800 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
28810 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
28820 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
28830 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ListNames(NameCo
28840 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74  ntext*, ExprList
28850 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28860 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
28870 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
28880 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
28890 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
288a0 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
288b0 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
288c0 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
288d0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
288e0 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
288f0 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
28900 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
28910 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
28920 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
28930 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
28940 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
28950 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28960 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
28970 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
28980 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
28990 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
289a0 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
289b0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
289c0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
289d0 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
289e0 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
289f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
28a00 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
28a10 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
28a20 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
28a30 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
28a40 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
28a50 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28a60 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
28a70 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
28a80 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28a90 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
28aa0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
28ab0 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
28ac0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
28ad0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
28ae0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
28af0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
28b00 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
28b10 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
28b20 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
28b30 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
28b40 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
28b50 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
28b60 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
28b70 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
28b80 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
28b90 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
28ba0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
28bb0 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
28bc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
28bd0 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
28be0 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
28bf0 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
28c00 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
28c10 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
28c20 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
28c30 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
28c40 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
28c50 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
28c60 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
28c70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
28c80 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
28c90 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
28ca0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
28cb0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
28cc0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
28cd0 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
28ce0 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65  , Index*);.#ifde
28cf0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
28d00 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  nt sqlite3KeyInf
28d10 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79  oIsWriteable(Key
28d20 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Info*);.#endif.i
28d30 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
28d40 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
28d50 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
28d60 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a  t, int, void *,.
28d70 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
28d80 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
28d90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
28da0 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
28db0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
28dc0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
28dd0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
28de0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
28df0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
28e00 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
28e10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
28e20 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a  omFault(sqlite3*
28e30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
28e40 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  omClear(sqlite3*
28e50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
28e60 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
28e70 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
28e80 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
28e90 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
28ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
28eb0 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
28ec0 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68  m*, sqlite3*, ch
28ed0 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
28ee0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
28ef0 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
28f00 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
28f10 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28f20 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
28f30 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
28f40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28f50 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
28f60 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
28f70 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
28f80 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
28f90 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
28fa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
28fb0 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
28fc0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
28fd0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
28fe0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
28ff0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
29000 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
29010 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
29020 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
29030 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
29040 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
29050 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
29060 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
29070 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
29080 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
29090 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
290a0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
290b0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
290c0 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
290d0 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
290e0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
290f0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
29100 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
29110 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
29120 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
29130 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  8,int,int*);.int
29140 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
29150 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
29160 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
29170 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
29180 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
29190 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
291a0 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
291b0 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
291c0 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
291d0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
291e0 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
291f0 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ue**);.#endif../
29200 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
29210 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
29220 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
29230 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
29240 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
29250 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69  d*(*)(u64));.voi
29260 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
29270 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
29280 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
29290 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
292a0 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
292b0 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
292c0 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
292d0 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
292e0 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
292f0 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
29300 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
29310 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
29320 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
29330 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29340 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
29350 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29360 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
29370 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
29380 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29390 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
293a0 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
293b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
293c0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
293d0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
293e0 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
293f0 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
29400 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
29410 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29420 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
29430 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
29440 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
29450 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
29460 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
29470 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
29480 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
29490 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
294a0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
294b0 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
294c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
294d0 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
294e0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
294f0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
29500 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
29510 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
29520 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
29530 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
29540 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
29550 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
29560 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
29570 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
29580 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
29590 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
295a0 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
295b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
295c0 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
295d0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
295e0 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
295f0 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
29600 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
29610 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
29620 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
29630 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
29640 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
29650 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
29660 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
29670 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
29680 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
29690 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
296a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
296b0 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
296c0 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
296d0 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
296e0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
296f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
29700 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
29710 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
29720 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
29730 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
29740 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
29750 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
29760 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
29770 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
29780 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
29790 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
297a0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
297b0 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
297c0 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
297d0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
297e0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
297f0 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
29800 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
29810 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
29820 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
29830 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
29840 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
29850 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
29860 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64  eInit(Parse*,Mod
29870 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
29880 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
29890 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74  TableClear(sqlit
298a0 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  e3*,Module*);.vo
298b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
298c0 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
298d0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
298e0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
298f0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
29900 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
29910 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
29920 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
29930 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
29940 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
29950 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
29960 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
29970 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
29980 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
29990 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
299a0 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
299b0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
299c0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
299d0 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
299e0 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
299f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
29a00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
29a10 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
29a20 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
29a30 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
29a40 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
29a50 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
29a60 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
29a70 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
29a80 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
29a90 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
29aa0 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
29ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76  .void sqlite3Inv
29ac0 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  alidFunction(sql
29ad0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
29ae0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
29af0 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  *);.sqlite3_int6
29b00 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72  4 sqlite3StmtCur
29b10 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33  rentTime(sqlite3
29b20 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  _context*);.int 
29b30 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
29b40 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
29b50 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
29b60 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
29b70 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
29b80 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
29b90 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
29ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
29bb0 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29  serReset(Parse*)
29bc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  ;.int sqlite3Rep
29bd0 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76  repare(Vdbe*);.v
29be0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
29bf0 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50  istCheckLength(P
29c00 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
29c10 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29c20 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
29c30 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c  BinaryCompareCol
29c40 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78  lSeq(Parse *, Ex
29c50 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  pr *, Expr *);.i
29c60 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e  nt sqlite3TempIn
29c70 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c  Memory(const sql
29c80 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68  ite3*);.const ch
29c90 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
29ca0 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b  alModename(int);
29cb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29cc0 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73  OMIT_WAL.  int s
29cd0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
29ce0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
29cf0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  int, int*, int*)
29d00 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57  ;.  int sqlite3W
29d10 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f  alDefaultHook(vo
29d20 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
29d30 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23  st char*,int);.#
29d40 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
29d50 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20  LITE_OMIT_CTE.  
29d60 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74  With *sqlite3Wit
29d70 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68  hAdd(Parse*,With
29d80 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
29d90 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  t*,Select*);.  v
29da0 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44  oid sqlite3WithD
29db0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57  elete(sqlite3*,W
29dc0 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ith*);.  void sq
29dd0 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61  lite3WithPush(Pa
29de0 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29  rse*, With*, u8)
29df0 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
29e00 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
29e10 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73  x,y,z).#define s
29e20 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
29e30 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (x,y).#endif../*
29e40 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   Declarations fo
29e50 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66  r functions in f
29e60 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68  key.c. All of th
29e70 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64  ese are replaced
29e80 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63   by.** no-op mac
29e90 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45  ros if OMIT_FORE
29ea0 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e  IGN_KEY is defin
29eb0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
29ec0 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b   no foreign.** k
29ed0 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  ey functionality
29ee0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49   is available. I
29ef0 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69  f OMIT_TRIGGER i
29f00 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a  s defined but.**
29f10 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
29f20 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73  Y is not, only s
29f30 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ome of the funct
29f40 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64  ions are no-oped
29f50 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73  . In.** this cas
29f60 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  e foreign keys a
29f70 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e  re parsed, but n
29f80 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e  o other function
29f90 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76  ality is.** prov
29fa0 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
29fb0 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
29fc0 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
29fd0 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
29fe0 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
29ff0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2a000 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
2a010 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2a020 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
2a030 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2a040 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
2a050 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2a060 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
2a070 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
2a080 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
2a090 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
2a0a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a0b0 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
2a0c0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
2a0d0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
2a0e0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
2a0f0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
2a100 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2a110 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
2a120 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2a130 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2a140 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
2a150 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
2a160 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
2a170 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2a180 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
2a190 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2a1a0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
2a1b0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2a1c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2a1d0 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
2a1e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2a1f0 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
2a200 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
2a210 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2a220 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
2a230 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2a240 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a250 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2a260 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2a270 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2a280 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2a290 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2a2a0 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2a2b0 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2a2c0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2a2d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2a2e0 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2a2f0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2a300 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2a310 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2a320 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2a330 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2a340 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2a350 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2a360 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2a370 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2a380 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2a390 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2a3a0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2a3b0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2a3c0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2a3d0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2a3e0 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2a3f0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2a400 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2a410 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2a420 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2a430 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
2a440 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
2a450 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
2a460 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a470 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
2a480 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
2a490 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2a4a0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
2a4b0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2a4c0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
2a4d0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2a4e0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
2a4f0 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
2a500 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
2a510 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
2a520 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
2a530 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
2a540 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
2a550 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
2a560 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
2a570 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
2a580 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
2a590 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
2a5a0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2a5b0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
2a5c0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
2a5d0 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
2a5e0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
2a5f0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
2a600 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
2a610 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
2a620 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
2a630 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
2a640 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
2a650 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
2a660 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2a670 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
2a680 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
2a690 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
2a6a0 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
2a6b0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
2a6c0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
2a6d0 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
2a6e0 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
2a6f0 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
2a700 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2a710 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
2a720 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
2a730 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
2a740 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2a750 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
2a760 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
2a770 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
2a780 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
2a790 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2a7a0 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
2a7b0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
2a7c0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
2a7d0 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
2a7e0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
2a7f0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
2a800 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  32, int*);..int 
2a810 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
2a820 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2a830 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2a840 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
2a850 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2a860 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
2a870 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
2a880 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2a890 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
2a8a0 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
2a8b0 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
2a8c0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2a8d0 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
2a8e0 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65  te3JournalIsInMe
2a8f0 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c  mory(sqlite3_fil
2a900 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e *p);.void sqli
2a910 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
2a920 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
2a930 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2a940 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
2a950 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
2a960 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
2a970 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
2a980 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
2a990 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2a9a0 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
2a9b0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2a9c0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
2a9d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2a9e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2a9f0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2aa00 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
2aa10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2aa20 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
2aa30 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
2aa40 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
2aa50 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
2aa60 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
2aa70 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
2aa80 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2aa90 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
2aaa0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2aab0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
2aac0 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
2aad0 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2aae0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2aaf0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
2ab00 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
2ab10 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
2ab20 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
2ab30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2ab40 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2ab50 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
2ab60 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2ab70 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
2ab80 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
2ab90 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2aba0 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
2abb0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2abc0 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
2abd0 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
2abe0 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
2abf0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2ac00 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
2ac10 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
2ac20 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
2ac30 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
2ac40 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
2ac50 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2ac60 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
2ac70 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
2ac80 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
2ac90 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69   messages..*/.#i
2aca0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2acb0 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
2acc0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
2acd0 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
2ace0 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
2acf0 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
2ad00 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
2ad10 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
2ad20 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
2ad30 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
2ad40 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
2ad50 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
2ad60 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
2ad70 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
2ad80 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
2ad90 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
2ada0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
2adb0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
2adc0 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
2add0 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
2ade0 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
2adf0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
2ae00 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
2ae10 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
2ae20 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
2ae30 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
2ae40 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
2ae50 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
2ae60 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
2ae70 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
2ae80 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2ae90 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
2aea0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
2aeb0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
2aec0 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
2aed0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
2aee0 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
2aef0 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
2af00 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
2af10 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
2af20 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2af30 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
2af40 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
2af50 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
2af60 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
2af70 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
2af80 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
2af90 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
2afa0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2afb0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
2afc0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
2afd0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
2afe0 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
2aff0 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
2b000 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2b010 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
2b020 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
2b030 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
2b040 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
2b050 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
2b060 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
2b070 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
2b080 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2b090 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
2b0a0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
2b0b0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
2b0c0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
2b0d0 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
2b0e0 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
2b0f0 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
2b100 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
2b110 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2b120 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
2b130 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
2b140 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
2b150 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
2b160 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
2b170 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
2b180 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
2b190 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
2b1a0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
2b1b0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
2b1c0 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
2b1d0 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
2b1e0 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
2b1f0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
2b200 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
2b210 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
2b220 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
2b230 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
2b240 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
2b250 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
2b260 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
2b270 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2b280 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
2b290 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
2b2a0 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a  onstraint..**.**
2b2b0 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
2b2c0 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
2b2d0 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
2b2e0 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
2b2f0 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
2b300 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
2b310 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
2b320 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
2b330 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2b340 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
2b350 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2b360 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
2b370 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2b380 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2b390 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
2b3a0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2b3b0 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
2b3c0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2b3d0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2b3e0 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
2b3f0 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
2b400 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2b410 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
2b420 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
2b430 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2b440 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
2b450 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2b460 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
2b470 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
2b480 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
2b490 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2b4a0 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
2b4b0 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
2b4c0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
2b4d0 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
2b4e0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41  ine MEMTYPE_SCRA
2b4f0 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20  TCH    0x04  /* 
2b500 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69  Scratch allocati
2b510 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2b520 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
2b530 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20    0x08  /* Page 
2b540 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
2b550 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  s */../*.** Thre
2b560 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
2b570 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
2b580 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
2b590 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
2b5a0 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
2b5b0 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
2b5c0 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
2b5d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
2b5e0 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
2b5f0 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
2b600 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
2b610 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2b620 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c  E_DBSTAT_VTAB) |
2b630 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b640 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
2b650 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
2b660 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
2b670 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  if..#endif /* _S
2b680 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.