/ Hex Artifact Content
Login

Artifact 2ce28b3c1228de3b6d392d6bd69b47f3aa2f2931:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
19a0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
19b0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
19c0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
19d0: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
19e0: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
19f0: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
1a00: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
1a10: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a20: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
1a30: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
1a40: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
1a50: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
1a60: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
1a70: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
1a80: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
1a90: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
1aa0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
1ab0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
1ac0: 65 72 20 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  er S..*/.#if def
1ad0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1ae0: 5f 48 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  _H).# define SQL
1af0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
1b00: 29 20 5c 0a 20 20 20 20 28 28 75 69 6e 74 70 74  ) \.    ((uintpt
1b10: 72 5f 74 29 28 50 29 3e 3d 28 75 69 6e 74 70 74  r_t)(P)>=(uintpt
1b20: 72 5f 74 29 28 53 29 20 26 26 20 28 75 69 6e 74  r_t)(S) && (uint
1b30: 70 74 72 5f 74 29 28 50 29 3c 28 75 69 6e 74 70  ptr_t)(P)<(uintp
1b40: 74 72 5f 74 29 28 45 29 29 0a 23 65 6c 73 65 0a  tr_t)(E)).#else.
1b50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1b60: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
1b70: 50 29 3e 3d 28 53 29 20 26 26 20 28 50 29 3c 28  P)>=(S) && (P)<(
1b80: 45 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E)).#endif../*.*
1b90: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
1ba0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
1bb0: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
1bc0: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
1bd0: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
1be0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
1bf0: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
1c00: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
1c10: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
1c20: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
1c30: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1c40: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1c50: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
1c60: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1c70: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
1c80: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
1c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1ca0: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
1cb0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
1cc0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
1cd0: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
1ce0: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
1cf0: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
1d00: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
1d10: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
1d20: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
1d30: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
1d40: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1d50: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
1d60: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1d70: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
1d80: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
1d90: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
1da0: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
1db0: 31 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1300.#    if !de
1dc0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
1dd0: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
1de0: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
1df0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1e00: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
1e10: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
1e20: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
1e30: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
1e40: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
1e50: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
1e60: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
1e70: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
1e80: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
1e90: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
1ea0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
1eb0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
1ec0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
1ed0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1ee0: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
1ef0: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
1f00: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
1f10: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
1f20: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
1f30: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
1f40: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
1f50: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
1f60: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
1f70: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
1f80: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
1f90: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
1fa0: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
1fb0: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
1fc0: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
1fd0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
1fe0: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
1ff0: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2000: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2010: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2020: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
2030: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
2040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2050: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2060: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2070: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2080: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2090: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
20a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
20b0: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
20c0: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
20d0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
20e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
20f0: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2100: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2110: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
2120: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
2130: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
2140: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2150: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
2160: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2170: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2180: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2190: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
21a0: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
21b0: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
21c0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
21d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
21e0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
21f0: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2200: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
2210: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
2220: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
2230: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
2240: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
2250: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
2260: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2270: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2280: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2290: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
22a0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
22b0: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
22c0: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
22d0: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
22e0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
22f0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2300: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2310: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
2320: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
2330: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2340: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
2350: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
2360: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2370: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2380: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2390: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
23a0: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
23b0: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
23c0: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
23d0: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
23e0: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
23f0: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2400: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
2410: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
2420: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
2430: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
2440: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
2450: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
2460: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2470: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2480: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2490: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
24a0: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
24b0: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
24c0: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
24d0: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
24e0: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
24f0: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2500: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
2510: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
2520: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
2530: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
2540: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
2550: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
2560: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2570: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2580: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2590: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
25a0: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
25b0: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
25c0: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
25d0: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
25e0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
25f0: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2600: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2610: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2620: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2630: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2640: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2650: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2660: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2670: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2680: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2690: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
26a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
26b0: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
26c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26d0: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
26e0: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
26f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2700: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2710: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2720: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2730: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2740: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2750: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2760: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2770: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2790: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
27a0: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
27b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
27c0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
27d0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
27e0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
27f0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2800: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2810: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2820: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2830: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2840: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2850: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2860: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2870: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2880: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2890: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
28a0: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
28b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
28c0: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
28d0: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
28e0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28f0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2900: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2910: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2920: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2940: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2950: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2960: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2970: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2980: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2990: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
29a0: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
29b0: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
29c0: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
29d0: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
29e0: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
29f0: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2a00: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2a10: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2a20: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2a30: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2a40: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2a50: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2a60: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2a70: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2a80: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2a90: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2aa0: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2ab0: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2ac0: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2ad0: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2af0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2b00: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2b10: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2b20: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2b30: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2b40: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2b50: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2b60: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
2b70: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
2b80: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
2b90: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2ba0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
2bb0: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
2bc0: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
2bd0: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
2be0: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
2bf0: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
2c00: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
2c10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
2c20: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
2c30: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
2c40: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
2c50: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
2c60: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
2c70: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
2c80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c90: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2ca0: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
2cb0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2cc0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
2cd0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2ce0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
2cf0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2d00: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
2d10: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2d20: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
2d30: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
2d40: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
2d50: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d60: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d70: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
2d80: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2d90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
2da0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2db0: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
2dc0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
2dd0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
2de0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
2df0: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
2e00: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
2e10: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2e20: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2e30: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2e40: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2e50: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2e60: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2e70: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2e80: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2e90: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2ea0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2eb0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2ec0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2ed0: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2ee0: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2ef0: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2f00: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2f10: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2f20: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2f30: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2f40: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2f50: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2f60: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2f70: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2f80: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2f90: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2fa0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2fb0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2fc0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2fd0: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2fe0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2ff0: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3000: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
3010: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
3020: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
3030: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
3040: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
3050: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
3060: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3070: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3080: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3090: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
30a0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
30b0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
30c0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
30d0: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
30e0: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
30f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3100: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
3110: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
3120: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
3130: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
3140: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
3150: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
3160: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3170: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3180: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3190: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
31a0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
31b0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
31c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
31d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
31e0: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
31f0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3200: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
3210: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
3220: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
3230: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
3240: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
3250: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
3260: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3270: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3280: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3290: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
32a0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
32b0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
32c0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
32d0: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
32e0: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
32f0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3300: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
3310: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
3320: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
3330: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
3340: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
3350: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
3360: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3370: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3380: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3390: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
33a0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
33b0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
33c0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
33d0: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
33e0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
33f0: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3400: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
3410: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
3420: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3430: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
3440: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
3450: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
3460: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3470: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3480: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3490: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
34a0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
34b0: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
34c0: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
34d0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
34e0: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
34f0: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3500: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3510: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3520: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3530: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
3540: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
3550: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
3560: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3570: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3580: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3590: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
35a0: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
35b0: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
35c0: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
35d0: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
35e0: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
35f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3600: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3610: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3620: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3630: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3640: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3650: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3660: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3670: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3680: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3690: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
36a0: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
36b0: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
36c0: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
36d0: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
36e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
36f0: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3700: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3710: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3720: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3730: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
3740: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
3750: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3760: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
3770: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
3780: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3790: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
37a0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
37b0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
37c0: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
37d0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
37e0: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
37f0: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
3800: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
3810: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
3820: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3830: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
3840: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
3850: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
3860: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
3870: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
3880: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
3890: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
38a0: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
38b0: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
38c0: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
38d0: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
38e0: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
38f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
3900: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
3910: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
3920: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
3930: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
3940: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3950: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
3960: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3970: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
3980: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
3990: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
39a0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
39b0: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
39c0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
39d0: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
39e0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
39f0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3a00: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3a10: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3a20: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3a30: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
3a40: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
3a50: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
3a60: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
3a70: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
3a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a90: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
3aa0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3ab0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3ac0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3ad0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3ae0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3af0: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3b00: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3b10: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3b20: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3b30: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3b40: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3b50: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3b60: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3b70: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3b80: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
3b90: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
3ba0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
3bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
3bc0: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
3bd0: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
3be0: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3bf0: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3c00: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3c10: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3c20: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3c30: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3c40: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3c50: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3c60: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3c70: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3c80: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
3c90: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
3ca0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3cb0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3cc0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
3cd0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
3ce0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3cf0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3d00: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3d10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d20: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3d30: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3d40: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3d50: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3d60: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3d70: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3d80: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3d90: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
3da0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
3db0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
3dc0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
3dd0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
3de0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
3df0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3e00: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3e10: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3e20: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3e30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3e40: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3e50: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3e60: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3e70: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3e80: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3e90: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
3ea0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
3eb0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
3ec0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
3ed0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
3ee0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
3ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3f00: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3f10: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3f20: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3f30: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3f40: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3f50: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3f60: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3f70: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3f80: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3f90: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
3fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
3fb0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
3fc0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
3fd0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
3fe0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
3ff0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
4000: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
4010: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
4020: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
4030: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
4040: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
4050: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
4060: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4070: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4080: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4090: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
40a0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
40b0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
40c0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
40d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
40e0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
40f0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4100: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4110: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4120: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4130: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4140: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
4150: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
4160: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4180: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4190: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
41a0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
41b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
41c0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
41d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
41e0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
41f0: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4200: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4210: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4220: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4230: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4240: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
4250: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4260: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4270: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4280: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4290: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
42a0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
42b0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
42c0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
42d0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
42e0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
42f0: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4300: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
4310: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
4320: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
4330: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
4340: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4350: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
4360: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4370: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4380: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4390: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
43a0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
43b0: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
43c0: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
43d0: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
43e0: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
43f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4400: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
4410: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
4420: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
4430: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
4440: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
4450: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
4460: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4470: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4480: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
44a0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
44b0: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
44c0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
44d0: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
44e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
44f0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4500: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
4510: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
4520: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
4530: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
4540: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
4550: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
4560: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4570: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4580: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4590: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
45a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
45b0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
45c0: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
45d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
45e0: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
45f0: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
4600: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
4610: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
4620: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
4630: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
4640: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
4650: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
4660: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4670: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
4680: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
4690: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
46a0: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
46b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
46c0: 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62  f no value has b
46d0: 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72  een provided for
46e0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
46f0: 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69  ER_THREADS, or i
4700: 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50  f.** SQLITE_TEMP
4710: 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f  _STORE is set to
4720: 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65   3 (never use te
4730: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20  mporary files), 
4740: 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72  set it.** to zer
4750: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
4760: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
4770: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
4780: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
4790: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
47a0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
47b0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
47c0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
47d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
47e0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
47f0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4800: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4810: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
4820: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4830: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4840: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4850: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4860: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
4870: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
4880: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4890: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
48a0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
48b0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
48c0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
48d0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
48e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
48f0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
4900: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4910: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
4920: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
4930: 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61  t initial alloca
4940: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67  tion for the pag
4950: 65 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e  ecache when usin
4960: 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61  g separate.** pa
4970: 67 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63  gecaches for eac
4980: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
4990: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69  ction.  A positi
49a0: 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ve number is the
49b0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  .** number of pa
49c0: 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ges.  A negative
49d0: 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c   number N transl
49e0: 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61  ations means tha
49f0: 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66  t a buffer.** of
4a00: 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69   -1024*N bytes i
4a10: 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  s allocated and 
4a20: 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79  used for as many
4a30: 20 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c   pages as it wil
4a40: 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64  l hold..*/.#ifnd
4a50: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4a60: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
4a70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4a80: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
4a90: 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66  NITSZ 100.#endif
4aa0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
4ab0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
4ac0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
4ad0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
4ae0: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
4af0: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
4b00: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
4b10: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
4b20: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
4b30: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
4b40: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
4b50: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
4b60: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
4b70: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
4b80: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
4b90: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
4ba0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
4bb0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
4bc0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
4bd0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
4be0: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
4bf0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
4c00: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
4c10: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
4c20: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
4c30: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
4c40: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
4c50: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
4c60: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
4c70: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
4c80: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
4c90: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
4ca0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
4cb0: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
4cc0: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
4cd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
4ce0: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
4cf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
4d00: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
4d10: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
4d20: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
4d30: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
4d40: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
4d50: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
4d60: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
4d70: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
4d80: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
4d90: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
4da0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
4db0: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
4dc0: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
4dd0: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
4de0: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
4df0: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
4e00: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
4e10: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
4e20: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
4e30: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4e40: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
4e50: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
4e60: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
4e70: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4e80: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
4e90: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
4ea0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
4eb0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4ec0: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
4ed0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
4ee0: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
4ef0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4f00: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
4f10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4f20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4f30: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
4f40: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
4f50: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
4f60: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
4f70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
4f80: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
4f90: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4fa0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
4fb0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4fc0: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
4fd0: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
4fe0: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
4ff0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5000: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5010: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5020: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5030: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5040: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5050: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5060: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5070: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5080: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5090: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
50a0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
50b0: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
50c0: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
50d0: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
50e0: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
50f0: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5100: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5110: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5120: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5130: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5140: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5150: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5160: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5170: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5180: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5190: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
51a0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
51b0: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
51c0: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
51d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
51e0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
51f0: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5200: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5210: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5220: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5230: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5240: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5250: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5260: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5270: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5280: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5290: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
52a0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
52b0: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
52c0: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
52d0: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
52e0: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
52f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5300: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5310: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5320: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5330: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5340: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5350: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5360: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5370: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5380: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5390: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
53a0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
53b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
53c0: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
53d0: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
53e0: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
53f0: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5400: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5410: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5420: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5430: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5440: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5450: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5460: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5470: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5480: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5490: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
54a0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
54b0: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
54c0: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
54d0: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
54e0: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
54f0: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
5500: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
5510: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
5520: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
5530: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
5540: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
5550: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
5560: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
5570: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
5580: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
5590: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
55a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
55b0: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
55c0: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
55d0: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
55e0: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
55f0: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
5600: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
5610: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
5620: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
5630: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
5640: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
5650: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
5660: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
5670: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
5680: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
5690: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
56a0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
56b0: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
56c0: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
56d0: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
56e0: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
56f0: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
5700: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
5710: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
5720: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
5730: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
5740: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
5750: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
5760: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
5770: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
5780: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
5790: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
57a0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
57b0: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
57c0: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
57d0: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
57e0: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
57f0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
5800: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
5810: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
5820: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
5830: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
5840: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
5850: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
5860: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
5870: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
5880: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
5890: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
58a0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
58b0: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
58c0: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
58d0: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
58e0: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
58f0: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
5900: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
5910: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
5920: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
5930: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
5940: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
5950: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
5960: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
5970: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
5980: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
5990: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
59a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
59b0: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
59c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
59d0: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
59e0: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
59f0: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
5a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5a10: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
5a20: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
5a30: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
5a40: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
5a50: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
5a60: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
5a70: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
5a80: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
5a90: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
5aa0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
5ab0: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
5ac0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
5ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5ae0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
5af0: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
5b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5b10: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
5b20: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
5b30: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
5b40: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
5b50: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
5b60: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
5b70: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
5b80: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
5b90: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
5ba0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
5bb0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
5bc0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
5bd0: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
5be0: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
5bf0: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
5c00: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
5c10: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
5c20: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5c30: 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65  YTEORDER=1 is se
5c40: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
5c50: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
5c60: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
5c70: 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64  .*/.#if (defined
5c80: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5c90: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5ca0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5cb0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5cc0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36     defined(__x86
5cd0: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
5ce0: 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64  __x86_64__) || d
5cf0: 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20  efined(_M_X64)  
5d00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5d10: 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c  ined(_M_AMD64) |
5d20: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d  | defined(_M_ARM
5d30: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5d40: 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20  (__x86)   ||    
5d50: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5d60: 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66  _arm__)) && !def
5d70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5d80: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
5d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5da0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
5db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5dc0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
5dd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5de0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
5df0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5e00: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5e10: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69  TE_UTF16LE.#endi
5e20: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 73  f.#if (defined(s
5e30: 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69  parc)    || defi
5e40: 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c  ned(__ppc__))  \
5e50: 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65 64  .    && !defined
5e60: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
5e70: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5e80: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5e90: 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 64  RDER    4321.# d
5ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
5eb0: 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65  ENDIAN    1.# de
5ec0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5ed0: 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66  LEENDIAN 0.# def
5ee0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5ef0: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
5f00: 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69  TF16BE.#endif.#i
5f10: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5f20: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69  E_BYTEORDER).# i
5f30: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5f40: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
5f50: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
5f60: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
5f70: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
5f80: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
5f90: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
5fa0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5fb0: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5fc0: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5fd0: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5ff0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
6000: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6010: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
6020: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
6030: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
6040: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
6050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6060: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
6070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
6080: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
6090: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
60a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
60b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
60c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
60d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
60e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
60f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
6100: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
6110: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
6120: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
6130: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
6140: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
6150: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
6160: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
6170: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
6180: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
6190: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
61a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
61b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
61c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
61d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
61e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
61f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
6200: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
6210: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
6220: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
6230: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
6240: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
6250: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
6260: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
6270: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
6280: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
6290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
62a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
62b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
62c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
62d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
62e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
62f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
6300: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
6310: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
6320: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
6330: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
6340: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
6350: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
6360: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
6370: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
6380: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
6390: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
63a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
63b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
63c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
63d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
63e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
63f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
6400: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
6410: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
6420: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
6430: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
6440: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
6450: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
6460: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
6470: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
6480: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
6490: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
64a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
64b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
64c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
64d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
64e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
64f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
6500: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
6510: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
6520: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
6530: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
6540: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
6550: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
6560: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6570: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6580: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6590: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
65a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
65b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
65c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
65d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
65e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
65f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
6600: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
6610: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
6620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6630: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6640: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
6650: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
6660: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
6670: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
6680: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
6690: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
66a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
66b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
66c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
66d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
66e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
66f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6700: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
6710: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
6720: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
6730: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6740: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6750: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  E 0.# endif.# de
6760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6770: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f  MMAP_SIZE_xc 1 /
6780: 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * exclude from c
6790: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
67a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
67b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
67c0: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
67d0: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
67e0: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
67f0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6800: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
6810: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
6820: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
6830: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
6840: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
6850: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
6860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
6870: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6880: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6890: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
68a0: 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  ZE 0.# define SQ
68b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
68c0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20  P_SIZE_xc 1  /* 
68d0: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
68e0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  me.c */.#endif.#
68f0: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
6900: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
6910: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6920: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6930: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6940: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6960: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
6970: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
6980: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
6990: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
69a0: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
69b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
69c0: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
69d0: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
69e0: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
69f0: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
6a00: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
6a10: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
6a20: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a30: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
6a40: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6a50: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
6a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
6a70: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6a80: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a90: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6aa0: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6ab0: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
6ac0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
6ad0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6ae0: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
6af0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6b00: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
6b10: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6b20: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
6b30: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
6b40: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
6b50: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
6b60: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
6b70: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
6b80: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
6b90: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
6ba0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
6bb0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
6bc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
6bd0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
6be0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
6bf0: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
6c00: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6c10: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
6c20: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6c30: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
6c40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
6c50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6c60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6c70: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
6c80: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
6c90: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
6ca0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
6cb0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
6cc0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
6cd0: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
6ce0: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
6cf0: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
6d00: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
6d10: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
6d20: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
6d30: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
6d40: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
6d50: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
6d60: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
6d70: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
6d80: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
6d90: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6da0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
6db0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
6dc0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
6dd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6de0: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
6df0: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
6e00: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
6e10: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
6e20: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
6e30: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
6e40: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
6e50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
6e60: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
6e70: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
6e80: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
6eb0: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
6ec0: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
6ed0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
6ee0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6ef0: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
6f00: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
6f10: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
6f20: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
6f30: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
6f40: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
6f50: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
6f60: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
6f70: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
6f80: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
6f90: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
6fa0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6fb0: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
6fc0: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
6fd0: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
6fe0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6ff0: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7000: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7010: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7020: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7030: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7040: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7050: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7060: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7070: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7080: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
7090: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
70a0: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
70b0: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
70c0: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
70d0: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
70e0: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
70f0: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7100: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7110: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7120: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7130: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
7140: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
7150: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
7160: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
7170: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
7180: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7190: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
71a0: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
71b0: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
71c0: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
71d0: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
71e0: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
71f0: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7200: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7210: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7220: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7230: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
7240: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
7250: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
7260: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
7270: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
7280: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
7290: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
72a0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
72b0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
72c0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
72d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
72e0: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
72f0: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
7300: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
7310: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
7320: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
7330: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
7340: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
7350: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
7360: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
7370: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
7380: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
7390: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
73a0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
73b0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
73c0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
73d0: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
73e0: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
73f0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
7400: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
7410: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
7420: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
7430: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
7440: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
7450: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
7460: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
7470: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
7480: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
7490: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
74a0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
74b0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
74c0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
74d0: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
74e0: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
74f0: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
7500: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
7510: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
7520: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
7530: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
7540: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
7550: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
7560: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
7570: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
7580: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
7590: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
75a0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
75b0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
75c0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
75d0: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
75e0: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
75f0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
7600: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
7610: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
7620: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
7630: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
7640: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
7650: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
7660: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
7670: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
7680: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
7690: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
76a0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
76b0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
76c0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
76d0: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
76e0: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
76f0: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
7700: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
7710: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
7720: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
7730: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
7740: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7750: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
7760: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
7770: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
7780: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
7790: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
77a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
77b0: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
77c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
77d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
77e0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
77f0: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
7800: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
7810: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
7820: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
7830: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
7840: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7850: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
7860: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
7870: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
7880: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
7890: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
78a0: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
78b0: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
78c0: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
78d0: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
78e0: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
78f0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
7900: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
7910: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
7920: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
7930: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
7940: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
7950: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
7960: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
7970: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
7980: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
7990: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
79b0: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
79c0: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
79d0: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
79e0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
79f0: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
7a00: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
7a10: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
7a20: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
7a30: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
7a40: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
7a50: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
7a60: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
7a70: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
7a80: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
7a90: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
7aa0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ab0: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
7ac0: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
7ad0: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
7ae0: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
7af0: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
7b00: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
7b10: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
7b20: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
7b30: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
7b40: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
7b50: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
7b60: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
7b70: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
7b80: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
7b90: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
7ba0: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
7bb0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
7bc0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7bd0: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
7be0: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
7bf0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
7c00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
7c10: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
7c20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
7c30: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
7c40: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7c50: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
7c60: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
7c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
7c80: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
7c90: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
7ca0: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
7cb0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
7cc0: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
7cd0: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
7ce0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7cf0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
7d00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
7d10: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
7d20: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
7d30: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
7d40: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
7d50: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
7d60: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
7d70: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
7d80: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
7d90: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
7da0: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
7db0: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
7dc0: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
7dd0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
7de0: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
7df0: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
7e00: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
7e10: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
7e20: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
7e30: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
7e40: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
7e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
7e60: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
7e70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e80: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
7e90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ea0: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
7eb0: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
7ec0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
7ed0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
7ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ef0: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
7f00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
7f10: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
7f20: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7f30: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
7f40: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7f50: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
7f60: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
7f70: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
7f80: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
7f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7fa0: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
7fb0: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
7fc0: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
7fd0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7fe0: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
7ff0: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8000: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8010: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8020: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8030: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8050: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
8060: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
8070: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
8080: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8090: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
80a0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
80b0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
80c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80d0: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
80e0: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
80f0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8100: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8110: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8120: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8130: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8140: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8160: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
8170: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
8180: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
8190: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
81a0: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
81b0: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
81c0: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
81d0: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
81e0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
81f0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8210: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
8220: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
8230: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
8240: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
8250: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
8260: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
8270: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
8280: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
8290: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
82a0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
82b0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
82c0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
82d0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
82e0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
82f0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
8300: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
8310: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
8320: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
8330: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
8340: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
8350: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
8360: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
8370: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
8380: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
8390: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
83a0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
83b0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
83c0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
83d0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
83e0: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
83f0: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
8400: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
8410: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
8420: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
8430: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
8440: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
8450: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
8460: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
8470: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
8480: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
8490: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
84a0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
84b0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
84c0: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
84d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
84e0: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
84f0: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
8500: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
8510: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
8520: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
8530: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
8540: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
8550: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
8560: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
8570: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
8580: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
8590: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
85a0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
85b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
85c0: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
85d0: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
85e0: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
85f0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
8600: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8610: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
8620: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
8630: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
8640: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
8650: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
8660: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
8670: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
8680: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8690: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
86a0: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
86b0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
86c0: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
86d0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
86e0: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
86f0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
8700: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
8710: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
8720: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
8730: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
8740: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
8750: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
8760: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
8770: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
8780: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
8790: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
87a0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
87b0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
87c0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
87d0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
87e0: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
87f0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
8800: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
8810: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
8820: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
8830: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
8840: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
8850: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
8860: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
8870: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
8880: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
8890: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
88a0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
88b0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
88c0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
88d0: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
88e0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
88f0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
8900: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
8910: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
8920: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
8930: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
8940: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
8950: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
8960: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
8970: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
8980: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
8990: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
89a0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
89b0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
89c0: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
89d0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
89e0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
89f0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
8a00: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
8a10: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
8a20: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
8a30: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
8a40: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
8a50: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
8a60: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
8a70: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
8a80: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
8a90: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
8aa0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
8ab0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
8ac0: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
8ad0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
8ae0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
8af0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8b10: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
8b20: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
8b30: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
8b40: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
8b50: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
8b60: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
8b70: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
8b80: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
8b90: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
8ba0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
8bb0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
8bc0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
8bd0: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
8be0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
8bf0: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
8c00: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
8c10: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
8c20: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
8c30: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
8c40: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8c50: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8c60: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
8c70: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
8c80: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
8c90: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8ca0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
8cb0: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
8cc0: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
8cd0: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
8ce0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
8cf0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
8d00: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
8d10: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
8d20: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8d30: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8d40: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
8d50: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8d60: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
8d70: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
8d80: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
8d90: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
8da0: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
8db0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
8dc0: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
8dd0: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
8de0: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
8df0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
8e00: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
8e10: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
8e20: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
8e30: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
8e40: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
8e50: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
8e60: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
8e70: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
8e80: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
8e90: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
8ea0: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
8eb0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
8ec0: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
8ed0: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
8ee0: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
8ef0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
8f00: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
8f10: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
8f20: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
8f30: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
8f40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
8f50: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
8f60: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
8f70: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
8f80: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
8f90: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
8fa0: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
8fb0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
8fc0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
8fd0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
8fe0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
8ff0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
9000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
9010: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
9020: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
9030: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
9040: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
9050: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
9060: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
9070: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
9080: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
9090: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
90a0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
90b0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
90c0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
90d0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
90e0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
90f0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
9100: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
9110: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
9120: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
9130: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
9140: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
9150: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
9160: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
9170: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
9180: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9190: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
91a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
91b0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
91c0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
91d0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
91e0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
91f0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
9200: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
9210: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
9220: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
9230: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
9240: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
9250: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
9260: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
9270: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
9280: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
9290: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
92a0: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
92b0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
92c0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
92d0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
92e0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
92f0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
9300: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9310: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
9320: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
9330: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
9340: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
9350: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
9360: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
9370: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
9380: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9390: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
93a0: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
93b0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
93c0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
93d0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
93e0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
93f0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
9400: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
9410: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
9420: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
9430: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
9440: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
9450: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
9460: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
9470: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
9480: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
9490: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
94a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
94b0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
94c0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
94d0: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
94e0: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
94f0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
9500: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
9510: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
9520: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9540: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
9550: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
9560: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
9570: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
9580: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
9590: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
95a0: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
95b0: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
95c0: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
95d0: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
95e0: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
95f0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
9600: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
9610: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
9620: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
9630: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
9640: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
9650: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
9660: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
9670: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
9680: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
9690: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
96a0: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
96b0: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
96c0: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
96d0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
96e0: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
96f0: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
9700: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
9710: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
9720: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
9730: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
9740: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  on definitions. 
9750: 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   (Application-de
9760: 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f  fined.** functio
9770: 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72  ns use a regular
9780: 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f   table table fro
9790: 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a  m hash.h.).**.**
97a0: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
97b0: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
97c0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
97d0: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
97e0: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
97f0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
9800: 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61  cDef.u.pHash cha
9810: 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  in..*/.#define S
9820: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
9830: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
9840: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
9850: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
9860: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
9870: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
9880: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
9890: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
98a0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
98b0: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
98c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
98d0: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
98e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
98f0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
9900: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
9910: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
9920: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
9930: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
9940: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
9950: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
9960: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
9970: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
9980: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
9990: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
99a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
99b0: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
99c0: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
99d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
99e0: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
99f0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
9a00: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
9a20: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
9a30: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
9a40: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
9a50: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
9a60: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
9a70: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
9a80: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
9a90: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
9aa0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
9ab0: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
9ac0: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
9ad0: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
9ae0: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
9af0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
9b00: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
9b10: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
9b20: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
9b30: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
9b40: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
9b50: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
9b60: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
9b70: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
9b80: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
9b90: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
9ba0: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
9bb0: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
9bc0: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
9bd0: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
9be0: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
9bf0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
9c00: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
9c10: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
9c20: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
9c30: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
9c40: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
9c50: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
9c60: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
9c70: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
9c80: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
9c90: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
9ca0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9cb0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9cc0: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
9cd0: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
9ce0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
9cf0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
9d00: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
9d10: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
9d20: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
9d30: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
9d40: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
9d50: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
9d60: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
9d70: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
9d80: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
9d90: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
9dc0: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
9dd0: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
9de0: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
9df0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
9e00: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
9e10: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9e20: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e40: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
9e50: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  har*);.#endif...
9e60: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9e70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
9e80: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
9e90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9ea0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
9eb0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
9ec0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
9ed0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
9ee0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
9ef0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
9f00: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
9f10: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
9f20: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
9f30: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
9f40: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
9f50: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
9f60: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
9f70: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
9f80: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
9f90: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
9fa0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
9fb0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
9fc0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9fe0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
9ff0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a010: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
a020: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
a030: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
a040: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
a050: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
a060: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
a070: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
a080: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0a0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
a0b0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
a0c0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
a0d0: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a0f0: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
a100: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
a110: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
a120: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
a130: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
a140: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
a150: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
a160: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
a170: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
a180: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
a190: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
a1a0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a1c0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
a1d0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
a1e0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
a1f0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a210: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
a220: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
a230: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
a240: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
a260: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
a270: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a290: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
a2a0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
a2b0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
a2c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
a2d0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
a2e0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
a2f0: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a310: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
a320: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
a330: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
a340: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
a350: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
a360: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
a370: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
a380: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
a390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
a3a0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
a3b0: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
a3c0: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
a3d0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
a3e0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
a3f0: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
a400: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
a410: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
a420: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
a430: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
a440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
a450: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
a460: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
a470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
a480: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
a490: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
a4a0: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
a4b0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
a4c0: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
a4d0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
a4e0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
a4f0: 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e   a TS */.  int n
a500: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
a510: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
a520: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
a530: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
a540: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
a550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
a560: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
a570: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
a580: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
a590: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
a5a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
a5b0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
a5c0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
a5d0: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
a5e0: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
a5f0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
a600: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
a610: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
a620: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
a630: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
a640: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
a650: 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d   int nMaxSorterM
a660: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  map;           /
a670: 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  * Maximum size o
a680: 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64  f regions mapped
a690: 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20   by sorter */.  
a6a0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
a6b0: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
a6c0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
a6d0: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
a6e0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
a6f0: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
a700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
a710: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
a720: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
a730: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a750: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
a760: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
a770: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
a780: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a7a0: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
a7b0: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
a7c0: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
a7d0: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
a7e0: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
a7f0: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
a800: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
a810: 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72  .    u8 imposter
a820: 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
a830: 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20   /* Building an 
a840: 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a  imposter table *
a850: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
a860: 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20  t nVdbeActive;  
a870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a880: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
a890: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
a8a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52   */.  int nVdbeR
a8b0: 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ead;            
a8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a8d0: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
a8e0: 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  at read or write
a8f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57   */.  int nVdbeW
a900: 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
a910: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a920: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
a930: 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  at read and writ
a940: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
a950: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
a960: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a970: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
a980: 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a  o VdbeExec() */.
a990: 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b    int nVDestroy;
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a9c0: 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20  ive OP_VDestroy 
a9d0: 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  operations */.  
a9e0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa00: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
aa10: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
aa20: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
aa30: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
aa40: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
aa50: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
aa60: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
aa70: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
aa80: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
aa90: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
aaa0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
aab0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aad0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
aae0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
aaf0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
ab00: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
ab10: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
ab20: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
ab30: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
ab40: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
ab50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ab60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
ab70: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
ab80: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
ab90: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
abc0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
abd0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
abe0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
abf0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
ac00: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
ac10: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
ac20: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
ac30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ac40: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
ac50: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
ac60: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
ac70: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
ac80: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
ac90: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
aca0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
acb0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
acc0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
acd0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
ace0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
acf0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
ad00: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
ad10: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
ad20: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
ad30: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
ad40: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
ad50: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
ad60: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
ad70: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
ad80: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
ad90: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
ada0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
adb0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
adc0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
add0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
ade0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
adf0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
ae00: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
ae10: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
ae20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
ae30: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
ae40: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
ae50: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
ae60: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
ae70: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
ae80: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
ae90: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
aea0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
aeb0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
aec0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
aed0: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
aee0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
af00: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
af10: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
af20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
af30: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
af40: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
af50: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
af60: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
af70: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
af80: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
af90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
afa0: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
afb0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
afc0: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
afd0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
afe0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
aff0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
b000: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
b010: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
b020: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
b030: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
b040: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
b050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
b060: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
b070: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
b080: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
b090: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
b0a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b0b0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
b0c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
b0d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
b0e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
b0f0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
b100: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
b110: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
b120: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
b130: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
b140: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
b150: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
b160: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
b170: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
b180: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
b190: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
b1a0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
b1b0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
b1c0: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
b1d0: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
b1e0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
b1f0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
b200: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
b210: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
b220: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
b230: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
b240: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
b250: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
b260: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
b270: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b290: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
b2a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
b2b0: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
b2c0: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
b2d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
b2e0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b2f0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
b300: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
b310: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
b320: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
b330: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
b340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
b350: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
b360: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
b370: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
b380: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
b390: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
b3a0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
b3b0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
b3c0: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
b3d0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
b3e0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
b3f0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
b400: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b420: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
b430: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
b440: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
b450: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
b460: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b470: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
b480: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
b490: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
b4a0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
b4b0: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
b4c0: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
b4d0: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
b4e0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
b4f0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
b500: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
b510: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
b520: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b530: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
b540: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
b550: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
b560: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
b570: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
b580: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
b590: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
b5a0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
b5b0: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
b5c0: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
b5d0: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
b5e0: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
b5f0: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
b600: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
b610: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
b620: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
b630: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
b640: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
b650: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b660: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
b670: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
b680: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
b690: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
b6a0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
b6b0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
b6c0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
b6d0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
b6e0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
b6f0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
b700: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
b710: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
b720: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
b730: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
b740: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
b750: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
b760: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
b770: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
b780: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
b790: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
b7a0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
b7b0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
b7c0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
b7d0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
b7e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
b7f0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
b800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b810: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
b820: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
b830: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
b840: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
b850: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
b860: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
b870: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
b880: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
b890: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
b8a0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
b8b0: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
b8c0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
b8d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b8e0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
b8f0: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
b900: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
b910: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
b920: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
b930: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
b940: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
b950: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
b960: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
b970: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
b980: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
b990: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
b9a0: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
b9b0: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
b9c0: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
b9d0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
b9e0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
b9f0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
ba00: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
ba10: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
ba20: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
ba30: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
ba40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ba50: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
ba60: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
ba70: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
ba80: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
ba90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
baa0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
bab0: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
bac0: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
bad0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
bae0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
baf0: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
bb00: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
bb10: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
bb20: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
bb30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bb40: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
bb50: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55  0x00000010  /* U
bb60: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
bb70: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
bb80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
bb90: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78  acheSpill     0x
bba0: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20  00000020  /* OK 
bbb0: 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63  to spill pager c
bbc0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
bbd0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
bbe0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
bbf0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
bc00: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
bc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc20: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
bc30: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
bc40: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
bc50: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
bc90: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
bca0: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcd0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
bce0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
bcf0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
bd00: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
bd10: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
bd20: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
bd30: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
bd40: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
bd80: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
bd90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bda0: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
bdb0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
bdc0: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
bdd0: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
bde0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bdf0: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
be00: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
be10: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
be20: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
be30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be40: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
be50: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
be60: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
be70: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
be80: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
be90: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
bea0: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
beb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
bec0: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
bed0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
bee0: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
bef0: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
bf00: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
bf10: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
bf20: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
bf30: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
bf40: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
bf50: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
bf60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bf70: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
bf80: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
bf90: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
bfa0: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
bfb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bfc0: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
bfd0: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
bfe0: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
bff0: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
c000: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
c010: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
c020: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
c030: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
c040: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c050: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
c060: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
c070: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
c080: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
c090: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
c0a0: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
c0b0: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
c0c0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
c0d0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
c0e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
c0f0: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
c100: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
c110: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
c120: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
c130: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
c140: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
c150: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
c160: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
c170: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c180: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
c190: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
c1a0: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
c1b0: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
c1c0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
c1d0: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
c1e0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
c1f0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
c200: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c210: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
c220: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
c230: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
c240: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
c250: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
c260: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
c270: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
c280: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
c290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c2a0: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
c2b0: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
c2c0: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
c2d0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
c2e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75  ine SQLITE_Vacuu
c2f0: 6d 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  m         0x0800
c300: 30 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74  0000  /* Current
c310: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
c320: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c330: 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20  _CellSizeCk     
c340: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
c350: 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20  heck btree cell 
c360: 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f  sizes on load */
c370: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c380: 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30  Fts3Tokenizer  0
c390: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e  x20000000  /* En
c3a0: 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69  able fts3_tokeni
c3b0: 7a 65 72 28 32 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  zer(2) */.../*.*
c3c0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
c3d0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
c3e0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
c3f0: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
c400: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
c410: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
c420: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
c430: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
c440: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
c450: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
c460: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
c470: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c480: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
c490: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
c4a0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
c4b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c4c0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
c4d0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
c4e0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
c4f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
c500: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
c510: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
c520: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
c530: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c540: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
c550: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
c560: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
c570: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
c580: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
c590: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
c5a0: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
c5b0: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
c5c0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
c5d0: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
c5e0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
c5f0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
c600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
c610: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
c620: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
c630: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
c640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
c650: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
c660: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
c670: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
c680: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
c690: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
c6a0: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
c6b0: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
c6c0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
c6d0: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
c6e0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
c6f0: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
c700: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
c710: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
c720: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
c730: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
c740: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
c750: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
c760: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c770: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
c780: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
c790: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
c7a0: 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65   data */.#define
c7b0: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
c7c0: 6e 74 73 20 20 20 20 30 78 32 30 30 30 20 20 20  nts    0x2000   
c7d0: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
c7e0: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
c7f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c800: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
c810: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
c820: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
c830: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
c840: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
c850: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
c860: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
c870: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
c880: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c890: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
c8a0: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
c8b0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
c8c0: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
c8d0: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
c8e0: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
c8f0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
c900: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
c910: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
c920: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
c930: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
c940: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
c950: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
c960: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
c970: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
c980: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
c990: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
c9a0: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
c9b0: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
c9c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
c9d0: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
c9e0: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
c9f0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
ca00: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
ca10: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
ca20: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
ca30: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
ca40: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
ca50: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
ca60: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
ca70: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
ca80: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
ca90: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
caa0: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
cab0: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
cac0: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
cad0: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
cae0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
caf0: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
cb00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
cb10: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
cb20: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
cb30: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
cb40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
cb50: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
cb60: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
cb70: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
cb80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cb90: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
cba0: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
cbb0: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
cbc0: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
cbd0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
cbe0: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
cbf0: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
cc00: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
cc10: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
cc20: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
cc30: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
cc40: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
cc50: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
cc60: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
cc70: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
cc80: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
cc90: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
cca0: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
ccb0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
ccc0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
ccd0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
cce0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
ccf0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
cd00: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
cd10: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
cd20: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
cd30: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
cd40: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
cd50: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
cd60: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
cd70: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
cd80: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
cd90: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
cda0: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
cdb0: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
cdc0: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
cdd0: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
cde0: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
cdf0: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
ce00: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
ce10: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
ce20: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
ce30: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
ce40: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
ce50: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
ce60: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
ce70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
ce80: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
ce90: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
cea0: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
ceb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
cec0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
ced0: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
cee0: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
cef0: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
cf00: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
cf10: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
cf20: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
cf30: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
cf40: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
cf50: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
cf60: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
cf70: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
cf80: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
cf90: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
cfa0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
cfb0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
cfc0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
cfd0: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
cfe0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
cff0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
d000: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
d010: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
d020: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
d030: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
d040: 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20  ;   /* SQL name 
d050: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
d060: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
d070: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
d080: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
d090: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
d0a0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
d0b0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75  e hash */.    Fu
d0c0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
d0d0: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
d0e0: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
d0f0: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
d100: 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ction */.  } u;.
d110: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
d120: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
d130: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
d140: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
d150: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
d160: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
d170: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
d180: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
d190: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
d1a0: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
d1b0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
d1c0: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
d1d0: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
d1e0: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
d1f0: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
d200: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
d210: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
d220: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
d230: 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74  f is set to.** t
d240: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
d250: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
d260: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
d270: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
d280: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
d290: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
d2a0: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
d2b0: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
d2c0: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
d2d0: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
d2e0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
d2f0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
d300: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
d310: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
d320: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
d330: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
d340: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
d350: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
d360: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
d370: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
d380: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
d390: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
d3a0: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
d3b0: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
d3c0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
d3d0: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
d3e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
d3f0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
d400: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
d410: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
d420: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
d430: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
d440: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
d450: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
d460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
d470: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
d480: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
d490: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
d4a0: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
d4b0: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
d4c0: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
d4d0: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
d4e0: 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a  YPEOFARG.  And.*
d4f0: 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  * SQLITE_FUNC_CO
d500: 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74  NSTANT must be t
d510: 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54  he same as SQLIT
d520: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e  E_DETERMINISTIC.
d530: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
d540: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
d550: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
d560: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
d570: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d580: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
d590: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
d5a0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
d5b0: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
d5c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d5d0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
d5e0: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
d5f0: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
d600: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
d610: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d620: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
d630: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
d640: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
d650: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d660: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d670: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
d680: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
d690: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
d6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d6b0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d6c0: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
d6d0: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
d6e0: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
d6f0: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
d700: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
d710: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
d720: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
d730: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
d740: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
d750: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
d760: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
d770: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
d780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d790: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
d7a0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
d7b0: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
d7c0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
d7d0: 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
d7e0: 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
d7f0: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
d800: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
d810: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d820: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
d830: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
d840: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
d850: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
d860: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
d870: 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
d880: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
d890: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
d8a0: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
d8b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
d8c0: 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
d8d0: 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
d8e0: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
d8f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d900: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
d910: 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
d920: 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
d930: 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
d940: 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
d950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d960: 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
d970: 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
d980: 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
d990: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
d9a0: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
d9b0: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
d9c0: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
d9d0: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
d9e0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
d9f0: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
da00: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
da10: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
da20: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
da30: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
da40: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
da50: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
da60: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
da70: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
da80: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
da90: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
daa0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
dab0: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
dac0: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
dad0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
dae0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
daf0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
db00: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
db10: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
db20: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
db30: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
db40: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
db50: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
db60: 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
db70: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
db80: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
db90: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
dba0: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
dbb0: 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
dbc0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
dbd0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
dbe0: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
dbf0: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
dc00: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
dc10: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
dc20: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
dc30: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
dc40: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
dc50: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
dc60: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
dc70: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
dc80: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
dc90: 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
dca0: 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
dcb0: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
dcc0: 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
dcd0: 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
dce0: 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
dcf0: 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
dd00: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
dd10: 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
dd20: 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
dd30: 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
dd40: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 41  query..**.**   A
dd50: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
dd60: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
dd70: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
dd80: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
dd90: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
dda0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
ddb0: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
ddc0: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
ddd0: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
dde0: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
ddf0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
de00: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
de10: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
de20: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
de30: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
de40: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
de50: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
de60: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
de70: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
de80: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
de90: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
dea0: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
deb0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
dec0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
ded0: 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63  e.**     that ac
dee0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
def0: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
df00: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
df10: 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75  l to C.**     fu
df20: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
df30: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
df40: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
df50: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
df60: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
df70: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
df80: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
df90: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
dfa0: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
dfb0: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
dfc0: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
dfd0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
dfe0: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
dff0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
e000: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
e010: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
e020: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
e030: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
e040: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
e050: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
e060: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
e070: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
e080: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
e090: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
e0a0: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
e0b0: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
e0c0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
e0d0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
e0e0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
e0f0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
e100: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
e110: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
e120: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
e130: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
e140: 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
e150: 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
e160: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
e170: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
e180: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
e190: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
e1a0: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
e1b0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
e1c0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
e1d0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
e1e0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
e1f0: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
e200: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
e210: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
e220: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
e230: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
e240: 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
e250: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
e260: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
e270: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
e280: 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
e290: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
e2a0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
e2b0: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
e2c0: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
e2d0: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
e2e0: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
e2f0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
e300: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
e310: 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
e320: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
e330: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
e340: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
e350: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
e360: 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
e370: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
e380: 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
e390: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
e3a0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
e3b0: 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
e3c0: 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
e3d0: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
e3e0: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
e3f0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
e400: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
e410: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
e420: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
e430: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
e440: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e450: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
e460: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
e470: 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
e480: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
e490: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
e4a0: 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
e4b0: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
e4c0: 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
e4d0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
e4e0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
e4f0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e500: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
e510: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
e520: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
e530: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
e540: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a  #zName, {0}}../*
e550: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
e560: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
e570: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
e580: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
e590: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
e5a0: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
e5b0: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
e5c0: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
e5d0: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
e5e0: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
e5f0: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
e600: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
e610: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
e620: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
e630: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
e640: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
e650: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e670: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
e680: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
e690: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
e6a0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
e6b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
e6c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e6d0: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
e6e0: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
e6f0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
e700: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
e710: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
e720: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
e730: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
e740: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
e750: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
e760: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
e770: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
e780: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
e790: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
e7a0: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
e7b0: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
e7c0: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
e7d0: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
e7e0: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
e7f0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
e800: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
e810: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
e820: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
e830: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
e840: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
e850: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
e860: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
e870: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
e880: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
e890: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
e8a0: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
e8b0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
e8c0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
e8d0: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
e8e0: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
e8f0: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
e900: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
e910: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
e920: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
e930: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
e940: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
e950: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
e960: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
e970: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
e980: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
e990: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
e9a0: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9c0: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
e9d0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
e9e0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
e9f0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
ea00: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
ea10: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
ea20: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
ea30: 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61  .  Table *pEpoTa
ea40: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
ea50: 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79          /* Epony
ea60: 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74  mous table for t
ea70: 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b  his module */.};
ea80: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
ea90: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
eaa0: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
eab0: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
eac0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
ead0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
eae0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
eaf0: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
eb00: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
eb10: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c   of this column,
eb20: 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20   \000, then the 
eb30: 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  type */.  Expr *
eb40: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
eb50: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
eb60: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
eb70: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
eb80: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
eb90: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
eba0: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
ebb0: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
ebc0: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
ebd0: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
ebe0: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
ebf0: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
ec00: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
ec10: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
ec20: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
ec30: 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
ec40: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
ec50: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76  imated size of v
ec60: 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c  alue in this col
ec70: 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29  umn. sizeof(INT)
ec80: 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
ec90: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
eca0: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
ecb0: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
ecc0: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
ecd0: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
ece0: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
ecf0: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
ed00: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
ed10: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
ed20: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
ed30: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
ed40: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
ed50: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
ed60: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
ed70: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
ed80: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
ed90: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
eda0: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
edb0: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
edc0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
edd0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
ede0: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
edf0: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
ee00: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
ee10: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
ee20: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
ee30: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
ee40: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
ee50: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
ee60: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
ee70: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
ee80: 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
ee90: 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
eea0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
eeb0: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
eec0: 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
eed0: 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
eee0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
eef0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
ef00: 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
ef10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
ef20: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
ef30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
ef40: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
ef50: 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
ef60: 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
ef70: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
ef80: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
ef90: 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
efa0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
efb0: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
efc0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
efd0: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
efe0: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
eff0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
f000: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
f010: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
f020: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
f030: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
f040: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
f050: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
f060: 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
f070: 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
f080: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f090: 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
f0a0: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
f0b0: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
f0c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
f0d0: 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
f0e0: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
f0f0: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
f100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55  fine SQLITE_SO_U
f110: 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e  NDEFINED -1 /* N
f120: 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65  o sort order spe
f130: 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  cified */../*.**
f140: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
f150: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
f160: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
f170: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
f180: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
f190: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
f1a0: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
f1b0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
f1c0: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
f1d0: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
f1e0: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
f1f0: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
f200: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
f210: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
f220: 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75  tively..**.** Bu
f230: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
f240: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
f250: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
f260: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
f270: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
f280: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
f290: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
f2a0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
f2b0: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
f2c0: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
f2d0: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
f2e0: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
f2f0: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
f300: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
f310: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
f320: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
f330: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
f340: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
f350: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
f360: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
f370: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
f380: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f390: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
f3a0: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
f3b0: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
f3c0: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
f3d0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
f3e0: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
f3f0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
f400: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
f410: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
f420: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
f430: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
f440: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
f450: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f460: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
f470: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
f480: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
f490: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
f4a0: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
f4b0: 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a  inity value..*/.
f4c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
f4d0: 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
f4e0: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
f4f0: 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
f500: 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
f510: 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
f520: 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
f530: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
f540: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
f550: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
f560: 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
f570: 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
f580: 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
f590: 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
f5a0: 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
f5b0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
f5c0: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
f5d0: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
f5e0: 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
f5f0: 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
f600: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
f610: 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
f620: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
f630: 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
f640: 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
f650: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f660: 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
f670: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
f680: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
f690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
f6a0: 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
f6b0: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
f6c0: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
f6d0: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
f6e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
f6f0: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
f700: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
f710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f720: 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
f730: 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
f740: 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
f750: 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
f760: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
f770: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
f780: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
f790: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
f7a0: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
f7b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
f7c0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
f7d0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
f7e0: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
f7f0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
f800: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
f810: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
f820: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f830: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
f840: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
f850: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
f860: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
f870: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
f880: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
f890: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
f8a0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
f8b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
f8c0: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
f8d0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
f8e0: 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70  ual table.** imp
f8f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
f900: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
f910: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
f920: 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20  ared between.** 
f930: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f940: 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20  ions, even when 
f950: 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
f960: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
f970: 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  se.** schema is 
f980: 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
f990: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
f9a0: 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
f9b0: 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
f9c0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
f9d0: 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
f9e0: 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
f9f0: 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
fa00: 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
fa10: 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
fa20: 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
fa30: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
fa40: 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
fa50: 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
fa60: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
fa70: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
fa80: 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
fa90: 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  les.** within th
faa0: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
fab0: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
fac0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
fad0: 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61  allers.** transa
fae0: 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
faf0: 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
fb00: 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
fb10: 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  me database.** c
fb20: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
fb30: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
fb40: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
fb50: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
fb60: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
fb70: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
fb80: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
fb90: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
fba0: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
fbb0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
fbc0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
fbd0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
fbe0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
fbf0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
fc00: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
fc10: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
fc20: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
fc30: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
fc40: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
fc50: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
fc60: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
fc70: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
fc80: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
fc90: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
fca0: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
fcb0: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
fcc0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
fcd0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
fce0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
fcf0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
fd00: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
fd10: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
fd20: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
fd30: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
fd40: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
fd50: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
fd60: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
fd70: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
fd80: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
fd90: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
fda0: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
fdb0: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
fdc0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a  jects are not.**
fdd0: 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
fde0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
fdf0: 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
fe00: 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a  Disconnect()ed.*
fe10: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
fe20: 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
fe30: 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
fe40: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
fe50: 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
fe60: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
fe70: 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
fe80: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
fe90: 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
fea0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
feb0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
fec0: 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
fed0: 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
fee0: 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  cted.** next tim
fef0: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
ff00: 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
ff10: 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
ff20: 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
ff30: 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
ff40: 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
ff50: 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
ff60: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
ff70: 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
ff80: 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
ff90: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
ffa0: 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
ffb0: 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
ffc0: 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
ffd0: 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
ffe0: 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
fff0: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
10000 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
10010 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
10020 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
10030 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
10040 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
10050 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
10060 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
10070 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
10080 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  by.** sqlite3DbM
10090 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
100a0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
100b0 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
100c0 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74  Table.db as.** t
100d0 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
100e0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
100f0 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
10100 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
10110 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
10120 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
10130 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
10140 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
10150 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
10160 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
10170 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
10180 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
10190 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
101a0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
101b0 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
101c0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
101f0 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
10200 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
10210 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
10220 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
10230 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
10240 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
10250 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
10260 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
10270 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
10280 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
10290 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
102a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
102b0 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
102c0 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
102d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
102e0 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
102f0 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
10300 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
10310 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
10320 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10330 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10340 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
10350 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
10360 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10370 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
10380 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
10390 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
103a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
103b0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
103c0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
103d0 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
103e0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
103f0 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
10400 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
10410 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
10420 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
10430 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
10440 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
10450 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
10460 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
10470 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
10480 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
10490 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
104a0 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
104b0 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
104c0 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
104d0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
104e0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
104f0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
10500 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
10510 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
10520 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
10530 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e            /*   .
10540 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  .. also used as 
10550 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74  column name list
10560 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20   in a VIEW */.  
10570 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
10580 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
10590 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73  ee page for this
105a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20   table */.  i16 
105b0 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
105c0 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
105d0 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
105e0 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
105f0 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
10600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10610 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10620 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
10630 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
10640 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10650 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
10660 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
10670 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
10680 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
10690 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
106a0 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
106b0 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
106c0 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
106d0 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
106e0 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
106f0 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
10700 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
10710 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
10720 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
10730 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
10740 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
10750 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
10760 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
10770 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
10780 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
10790 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
107a0 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
107b0 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
107c0 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
107d0 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
107e0 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
107f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10800 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
10810 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
10820 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
10830 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
10840 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
10850 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
10860 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10870 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
10880 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
10890 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
108a0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
108b0 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
108c0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
108d0 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f  leArg;  /* 0: mo
108e0 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32  dule 1: schema 2
108f0 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e  : vtab name 3...
10900 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62  : args */.  VTab
10910 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
10920 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
10930 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
10940 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
10950 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
10960 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
10970 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
10980 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
10990 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
109a0 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
109b0 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
109c0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
109d0 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
109e0 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
109f0 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
10a00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
10a10 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
10a20 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
10a30 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65  *.** TF_OOOHidde
10a40 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62  n applies to tab
10a50 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74  les or view that
10a60 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c   have hidden col
10a70 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a  umns that are.**
10a80 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e   followed by non
10a90 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e  -hidden columns.
10aa0 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45    Example:  "CRE
10ab0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
10ac0 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61  E x USING.** vta
10ad0 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b  b1(a HIDDEN, b);
10ae0 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73  ".  Since "b" is
10af0 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f   a non-hidden co
10b00 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20  lumn but "a" is 
10b10 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54  hidden,.** the T
10b20 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72  F_OOOHidden attr
10b30 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c  ibute would appl
10b40 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20  y in this case. 
10b50 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71   Such tables req
10b60 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20  uire.** special 
10b70 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20  handling during 
10b80 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  INSERT processin
10b90 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  g..*/.#define TF
10ba0 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
10bb0 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
10bc0 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
10bd0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
10be0 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
10bf0 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
10c00 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
10c10 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
10c20 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
10c30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
10c40 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
10c50 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
10c60 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
10c70 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
10c80 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
10c90 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
10ca0 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
10cb0 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
10cc0 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
10cd0 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
10ce0 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
10cf0 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20  owid    0x20    
10d00 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52  /* No rowid.  PR
10d10 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
10d20 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
10d30 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
10d40 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f  d  0x40    /* No
10d50 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72   user-visible "r
10d60 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  owid" column */.
10d70 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69  #define TF_OOOHi
10d80 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30 20  dden       0x80 
10d90 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64     /* Out-of-Ord
10da0 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  er hidden column
10db0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  s */.../*.** Tes
10dc0 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
10dd0 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
10de0 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
10df0 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
10e00 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
10e10 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
10e20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
10e30 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
10e40 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
10e50 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
10e60 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
10e70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
10e80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
10e90 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
10ea0 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d  l(X)      (((X)-
10eb0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56  >tabFlags & TF_V
10ec0 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73  irtual)!=0).#els
10ed0 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
10ee0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
10ef0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
10f00 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
10f10 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
10f20 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
10f30 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
10f40 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
10f50 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
10f60 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
10f70 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
10f80 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
10f90 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
10fa0 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
10fb0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
10fc0 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
10fd0 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
10fe0 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
10ff0 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
11000 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
11010 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
11020 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
11030 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
11040 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
11050 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
11060 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
11070 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
11080 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
11090 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
110a0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
110b0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
110c0 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
110d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
110e0 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
110f0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
11100 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
11110 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
11120 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
11130 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
11140 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
11150 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
11160 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
11170 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
11180 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
11190 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
111a0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
111b0 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
111c0 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
111d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
111e0 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
111f0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
11200 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
11210 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
11220 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
11230 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
11240 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
11250 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
11260 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
11270 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
11280 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11290 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
112a0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
112b0 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
112c0 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
112d0 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
112e0 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
112f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
11300 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
11310 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
11320 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
11330 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
11340 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
11350 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
11360 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
11370 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
11380 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
11390 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
113a0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
113b0 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
113c0 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
113d0 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
113e0 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
113f0 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
11400 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
11410 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
11420 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
11430 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
11440 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
11450 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
11460 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
11470 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
11480 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
11490 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
114a0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
114b0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
114c0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
114d0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
114e0 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
114f0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
11500 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
11510 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
11520 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
11530 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
11540 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
11550 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
11560 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
11570 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
11580 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
11590 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
115a0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
115b0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
115c0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
115d0 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
115e0 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
115f0 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
11600 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
11610 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
11620 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
11630 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
11640 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
11650 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
11660 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
11670 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
11680 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
11690 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
116a0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
116b0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
116c0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
116d0 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
116e0 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
116f0 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
11700 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
11710 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
11720 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
11730 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
11740 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
11750 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
11760 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
11770 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
11780 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
11790 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
117a0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
117b0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
117c0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
117d0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
117e0 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
117f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11800 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
11810 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
11820 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
11830 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
11840 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
11850 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
11860 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
11870 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
11880 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
11890 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
118a0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
118b0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
118c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
118d0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
118e0 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
118f0 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
11900 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
11910 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
11920 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
11930 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
11940 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
11950 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
11960 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
11970 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
11980 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
11990 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
119a0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
119b0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
119c0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
119d0 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
119e0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
119f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
11a00 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
11a10 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
11a20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
11a30 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
11a40 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
11a50 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
11a60 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
11a70 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
11a80 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
11a90 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
11aa0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
11ab0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
11ac0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
11ad0 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
11ae0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
11af0 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
11b00 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
11b10 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
11b20 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
11b30 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
11b40 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
11b50 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
11b60 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
11b70 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
11b80 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
11b90 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
11ba0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
11bb0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
11bc0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
11bd0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
11be0 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
11bf0 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
11c00 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
11c10 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
11c20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
11c30 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
11c40 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
11c50 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
11c60 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
11c70 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
11c80 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
11c90 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
11ca0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
11cb0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
11cc0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
11cd0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
11ce0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
11cf0 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
11d00 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
11d10 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
11d20 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
11d30 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
11d40 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
11d50 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
11d60 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
11d70 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
11d80 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
11d90 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
11da0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
11db0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
11dc0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
11dd0 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
11de0 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
11df0 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
11e00 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
11e10 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
11e20 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
11e30 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
11e40 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
11e50 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
11e60 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
11e70 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
11e80 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
11e90 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
11ea0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
11eb0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
11ec0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
11ed0 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
11ee0 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
11ef0 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
11f00 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
11f10 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
11f20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
11f30 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
11f40 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
11f50 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
11f60 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
11f70 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
11f80 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
11f90 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
11fa0 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
11fb0 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
11fc0 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
11fd0 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
11fe0 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
11ff0 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
12000 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
12010 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
12020 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
12030 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
12040 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
12050 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
12060 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
12070 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
12080 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
12090 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
120a0 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
120b0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
120c0 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
120d0 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
120e0 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
120f0 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
12100 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
12110 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
12120 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
12130 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
12140 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
12150 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
12160 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
12170 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
12180 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
12190 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
121a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
121b0 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
121c0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
121d0 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
121e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
121f0 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
12200 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
12210 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
12220 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
12230 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
12240 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
12250 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
12260 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
12270 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
12280 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
12290 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
122a0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
122b0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
122c0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
122d0 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
122e0 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
122f0 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
12300 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
12310 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
12320 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
12330 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
12340 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
12350 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
12360 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
12370 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
12380 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
12390 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
123a0 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
123b0 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
123c0 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
123d0 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
123e0 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
123f0 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
12400 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
12410 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12420 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
12430 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
12440 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
12450 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
12460 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
12470 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
12480 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
12490 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
124a0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
124b0 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
124c0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
124d0 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c   */.  u16 nXFiel
124e0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
124f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62  ber of columns b
12500 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f  eyond the key co
12510 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74  lumns */.  sqlit
12520 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
12530 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
12540 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
12550 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
12560 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
12570 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
12580 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
12590 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
125a0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
125b0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
125c0 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
125d0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
125e0 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
125f0 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
12600 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
12610 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
12620 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
12630 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
12640 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
12650 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
12660 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
12670 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
12680 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
12690 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
126a0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
126b0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
126c0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
126d0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
126e0 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
126f0 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
12700 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
12710 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
12720 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
12730 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
12740 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
12750 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
12760 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
12770 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
12780 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
12790 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
127a0 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
127b0 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
127c0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
127d0 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
127e0 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
127f0 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
12800 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
12810 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
12820 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
12830 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
12840 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
12850 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
12860 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
12870 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
12880 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
12890 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
128a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
128b0 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
128c0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
128d0 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
128e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
128f0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
12900 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
12910 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
12920 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
12930 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
12940 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
12950 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
12960 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
12970 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
12980 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
12990 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
129a0 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
129b0 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
129c0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
129d0 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
129e0 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
129f0 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
12a00 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
12a10 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
12a20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
12a30 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
12a40 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
12a50 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
12a60 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
12a70 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
12a80 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
12a90 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
12aa0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
12ab0 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
12ac0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
12ad0 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
12ae0 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
12af0 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
12b00 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
12b10 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
12b20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
12b30 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
12b40 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
12b50 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
12b60 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
12b70 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
12b80 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
12b90 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
12ba0 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
12bb0 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
12bc0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
12bd0 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
12be0 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
12bf0 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
12c00 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
12c10 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
12c20 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
12c30 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
12c40 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
12c50 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
12c60 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
12c70 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
12c80 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
12c90 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
12ca0 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
12cb0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
12cc0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
12cd0 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
12ce0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
12cf0 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
12d00 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
12d10 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
12d20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12d30 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
12d40 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
12d50 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
12d60 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
12d70 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
12d80 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
12d90 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
12da0 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
12db0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
12dc0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
12dd0 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
12de0 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
12df0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
12e00 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
12e10 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
12e30 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
12e40 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f  f (rhs < lhs) */
12e50 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
12e60 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
12e70 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
12e80 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
12e90 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
12ea0 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
12eb0 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
12ec0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
12ed0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
12ee0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
12ef0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
12f00 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
12f10 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
12f20 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
12f30 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
12f40 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
12f50 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
12f60 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
12f70 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
12f80 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
12f90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
12fa0 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
12fb0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
12fc0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
12fd0 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
12fe0 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
12ff0 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
13000 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
13010 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
13020 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
13030 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
13040 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
13050 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
13060 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
13070 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
13080 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
13090 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
130a0 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
130b0 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
130c0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
130d0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
130e0 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
130f0 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
13100 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
13110 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
13120 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
13130 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
13140 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
13150 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
13160 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
13170 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
13180 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
13190 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
131a0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
131b0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
131c0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
131d0 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
131e0 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
131f0 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
13200 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
13210 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
13220 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
13230 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
13240 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
13250 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
13260 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
13270 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
13280 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
13290 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
132a0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
132b0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
132c0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
132d0 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
132e0 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
132f0 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
13300 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
13310 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
13320 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
13330 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
13340 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
13350 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
13360 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
13370 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
13380 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
13390 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
133a0 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
133b0 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
133c0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
133d0 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
133e0 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
133f0 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
13400 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
13410 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
13420 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
13430 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
13440 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
13450 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
13460 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
13470 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
13480 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
13490 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
134a0 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
134b0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
134c0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
134d0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
134e0 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
134f0 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
13500 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
13510 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
13520 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
13530 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
13540 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
13550 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
13560 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
13570 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
13580 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
13590 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
135a0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
135b0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
135c0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
135d0 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
135e0 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
135f0 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
13600 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
13610 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
13620 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
13630 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
13640 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13650 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
13660 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
13670 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
13680 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
13690 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
136a0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
136b0 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
136c0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
136d0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
136e0 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
136f0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
13700 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
13710 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
13720 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
13730 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
13740 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
13750 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
13760 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
13770 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
13780 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
13790 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
137a0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
137b0 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
137c0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
137d0 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
137e0 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
137f0 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
13800 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
13810 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
13820 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
13830 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
13840 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
13850 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
13860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
13870 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
13880 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
13890 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
138a0 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
138b0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
138c0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
138d0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
138e0 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
138f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13900 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
13910 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
13920 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
13930 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13940 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
13950 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
13960 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
13970 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
13980 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
13990 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
139a0 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
139b0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
139c0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
139d0 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
139e0 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
139f0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
13a00 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
13a10 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
13a20 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
13a30 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
13a40 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
13a50 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
13a60 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
13a70 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
13a80 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
13a90 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
13aa0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
13ab0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
13ac0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
13ad0 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
13ae0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
13af0 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
13b00 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
13b10 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
13b20 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
13b30 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
13b40 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
13b50 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
13b60 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65  if true */.#ifde
13b70 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
13b80 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
13b90 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
13ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13bb0 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
13bc0 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
13bd0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
13be0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
13bf0 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
13c00 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
13c10 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
13c20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
13c30 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
13c40 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
13c50 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
13c60 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
13c70 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
13c80 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
13c90 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
13ca0 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
13cb0 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
13cc0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
13cd0 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
13ce0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
13cf0 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
13d00 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
13d10 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
13d20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
13d30 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ndex */.#endif.}
13d40 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
13d50 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65   values for Inde
13d60 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65  x.idxType.*/.#de
13d70 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
13d80 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20  YPE_APPDEF      
13d90 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75  0   /* Created u
13da0 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45  sing CREATE INDE
13db0 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  X */.#define SQL
13dc0 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51  ITE_IDXTYPE_UNIQ
13dd0 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49  UE      1   /* I
13de0 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51  mplements a UNIQ
13df0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  UE constraint */
13e00 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
13e10 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
13e20 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68  EY  2   /* Is th
13e30 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
13e40 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a  r the table */..
13e50 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
13e60 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50  f index X is a P
13e70 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78  RIMARY KEY index
13e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72   */.#define IsPr
13e90 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29  imaryKeyIndex(X)
13ea0 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d    ((X)->idxType=
13eb0 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f  =SQLITE_IDXTYPE_
13ec0 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20  PRIMARYKEY)../* 
13ed0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
13ee0 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51  ndex X is a UNIQ
13ef0 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  UE index */.#def
13f00 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65  ine IsUniqueInde
13f10 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  x(X)      ((X)->
13f20 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
13f30 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e  )../* The Index.
13f40 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65  aiColumn[] value
13f50 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70  s are normally p
13f60 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e  ositive integer.
13f70 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61    But.** there a
13f80 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65  re some negative
13f90 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76   values that hav
13fa0 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
13fb0 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  g:.*/.#define XN
13fc0 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20  _ROWID     (-1) 
13fd0 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
13fe0 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77  olumn is the row
13ff0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  id */.#define XN
14000 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20  _EXPR      (-2) 
14010 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
14020 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72  olumn is an expr
14030 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ession */../*.**
14040 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
14050 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
14060 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
14070 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
14080 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20  memory.** using 
14090 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
140a0 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
140b0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
140c0 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
140d0 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
140e0 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
140f0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
14100 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
14110 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
14120 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
14130 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
14140 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
14150 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
14160 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
14170 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
14180 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
14190 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
141a0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
141b0 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
141c0 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
141d0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
141e0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
141f0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
14200 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
14210 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
14220 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
14230 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
14240 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
14250 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
14260 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
14270 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
14280 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
14290 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
142a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
142b0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
142c0 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
142d0 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
142e0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
142f0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54  .**.** Note if T
14300 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54  oken.z==0 then T
14310 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b  oken.dyn and Tok
14320 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e  en.n are undefin
14330 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f  ed and.** may co
14340 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c  ntain random val
14350 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b  ues.  Do not mak
14360 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e  e any assumption
14370 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
14380 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
14390 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
143a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
143b0 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
143c0 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74   *z;     /* Text
143d0 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20   of the token.  
143e0 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  Not NULL-termina
143f0 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ted! */.  unsign
14400 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20  ed int n;    /* 
14410 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  Number of charac
14420 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b  ters in this tok
14430 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  en */.};../*.** 
14440 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
14450 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  his structure co
14460 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
14470 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
14480 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
14490 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20  r a SELECT that 
144a0 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
144b0 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
144c0 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d  .** If Expr.op==
144d0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72  TK_AGG_COLUMN or
144e0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
144f0 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49   then Expr.pAggI
14500 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  nfo is a.** poin
14510 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
14520 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72  cture.  The Expr
14530 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69  .iColumn field i
14540 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a  s the index in.*
14550 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d  * AggInfo.aCol[]
14560 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e   or AggInfo.aFun
14570 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  c[] of informati
14580 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
14590 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
145a0 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a  r that node..**.
145b0 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75  ** AggInfo.pGrou
145c0 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e  pBy and AggInfo.
145d0 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e  aFunc.pExpr poin
145e0 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68  t to fields with
145f0 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  in the.** origin
14600 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74  al Select struct
14610 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ure that describ
14620 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  es the SELECT st
14630 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a  atement.  These.
14640 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74  ** fields do not
14650 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65   need to be free
14660 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74  d when deallocat
14670 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20  ing the AggInfo 
14680 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
14690 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20  ruct AggInfo {. 
146a0 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20   u8 directMode; 
146b0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65           /* Dire
146c0 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64  ct rendering mod
146d0 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74  e means take dat
146e0 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20  a directly.     
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75       ** from sou
14710 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65  rce tables rathe
14720 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75  r than from accu
14730 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38  mulators */.  u8
14740 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20   useSortingIdx; 
14750 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65        /* In dire
14760 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e  ct mode, referen
14770 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  ce the sorting i
14780 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20  ndex rather.    
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68        ** than th
147b0 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
147c0 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
147d0 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  dx;         /* C
147e0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
147f0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
14800 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  x */.  int sorti
14810 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f  ngIdxPTab;     /
14820 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
14830 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  of pseudo-table 
14840 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
14850 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
14860 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
14870 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
14880 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
14890 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20  mnReg, mxReg;   
148a0 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20      /* Range of 
148b0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
148c0 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64  ted for aCol and
148d0 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72   aFunc */.  Expr
148e0 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
148f0 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
14900 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
14910 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63  struct AggInfo_c
14920 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65  ol {    /* For e
14930 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20  ach column used 
14940 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  in source tables
14950 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
14960 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
14970 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65   /* Source table
14980 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62   */.    int iTab
14990 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
149a0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
149b0 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  r of the source 
149c0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
149d0 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
149e0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
149f0 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68  number within th
14a00 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
14a10 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65  /.    int iSorte
14a20 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f  rColumn;       /
14a30 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
14a40 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
14a50 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
14a60 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
14a70 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
14a80 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
14a90 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
14aa0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
14ab0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
14ac0 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
14ad0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
14ae0 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20   } *aCol;.  int 
14af0 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
14b00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14b10 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e   used entries in
14b20 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
14b30 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
14b40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14b50 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
14b60 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
14b70 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
14ba0 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
14bb0 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
14bc0 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14be0 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
14bf0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
14c00 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
14c10 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
14c20 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
14c30 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
14c40 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
14c50 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
14c60 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
14c70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
14c80 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
14c90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
14ca0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
14cb0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
14cc0 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
14cd0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
14ce0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
14cf0 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
14d00 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
14d10 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
14d20 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
14d30 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62  /* Ephemeral tab
14d40 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72  le used to enfor
14d50 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20  ce DISTINCT */. 
14d60 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74   } *aFunc;.  int
14d70 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   nFunc;         
14d80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14d90 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75  f entries in aFu
14da0 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
14db0 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
14dc0 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
14dd0 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
14de0 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
14df0 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
14e00 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
14e10 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
14e20 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
14e30 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
14e40 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
14e50 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
14e60 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
14e70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
14e80 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
14e90 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
14ea0 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
14eb0 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
14ec0 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
14ed0 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
14ee0 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
14ef0 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
14f00 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
14f10 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
14f20 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
14f30 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
14f40 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
14f50 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
14f60 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
14f70 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
14f80 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
14f90 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
14fa0 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
14fb0 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
14fc0 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
14fd0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
14fe0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
14ff0 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
15000 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
15010 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
15020 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
15030 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
15040 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
15050 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
15060 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
15070 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
15080 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
15090 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
150a0 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
150b0 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
150c0 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
150d0 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
150e0 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
150f0 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
15100 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
15110 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
15120 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
15130 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
15140 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
15150 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
15160 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
15170 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
15180 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
15190 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
151a0 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
151b0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
151c0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
151d0 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
151e0 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
151f0 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53  BLOB,.** or TK_S
15200 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
15210 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
15220 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
15230 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
15240 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
15250 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
15260 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
15270 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
15280 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20  contains the.** 
15290 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46  variable name. F
152a0 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65  inally, if the e
152b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
152c0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b  SQL function (TK
152d0 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74  _FUNCTION),.** t
152e0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
152f0 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65  ontains the name
15300 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
15310 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69  ..**.** Expr.pRi
15320 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65  ght and Expr.pLe
15330 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20  ft are the left 
15340 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70  and right subexp
15350 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a  ressions of a.**
15360 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
15370 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68  . Either or both
15380 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a   may be NULL..**
15390 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  .** Expr.x.pList
153a0 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72   is a list of ar
153b0 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65  guments if the e
153c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
153d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a  SQL function,.**
153e0 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69   a CASE expressi
153f0 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72  on or an IN expr
15400 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
15410 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79  rm "<lhs> IN (<y
15420 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20  >, <z>...)"..** 
15430 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
15440 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78  s used if the ex
15450 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
15460 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65  b-select or an e
15470 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20  xpression of.** 
15480 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
15490 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
154a0 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53  . If the EP_xIsS
154b0 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74  elect bit is set
154c0 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
154d0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
154e0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
154f0 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77  is valid. Otherw
15500 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73  ise, Expr.x.pLis
15510 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a  t is.** valid..*
15520 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
15530 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
15540 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
15550 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
15560 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
15570 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
15580 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
15590 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
155a0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
155b0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
155c0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
155d0 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
155e0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
155f0 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
15600 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
15610 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
15620 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
15630 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
15640 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
15650 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
15660 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
15670 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
15680 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
15690 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
156a0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
156b0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
156c0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
156d0 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
156e0 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
156f0 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
15700 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
15710 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15720 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
15730 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
15740 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20  uestion mark.** 
15750 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
15760 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
15770 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
15780 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
15790 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65  e index.** numbe
157a0 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
157b0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
157c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
157d0 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
157e0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
157f0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
15800 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
15810 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15820 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
15830 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
15840 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
15850 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
15860 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
15870 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
15880 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
15890 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
158a0 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
158b0 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
158c0 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
158d0 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
158e0 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
158f0 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
15900 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
15910 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
15920 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
15930 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
15940 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
15950 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
15960 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
15970 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
15980 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
15990 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
159a0 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
159b0 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
159c0 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
159d0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
159e0 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
159f0 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
15a00 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
15a10 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
15a20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
15a30 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
15a40 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
15a50 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
15a60 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
15a70 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
15a80 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
15a90 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
15aa0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
15ab0 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
15ac0 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
15ad0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
15ae0 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
15af0 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
15b00 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
15b10 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
15b20 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
15b30 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
15b40 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
15b50 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
15b60 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
15b70 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
15b80 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
15b90 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
15ba0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
15bb0 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
15bc0 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
15bd0 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
15be0 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
15bf0 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
15c00 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
15c10 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
15c20 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
15c30 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
15c40 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
15c50 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
15c60 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
15c70 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
15c80 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
15c90 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
15ca0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
15cb0 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
15cc0 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
15cd0 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15cf0 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
15d00 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
15d10 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
15d20 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
15d30 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
15d40 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
15d50 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
15d60 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
15d70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15d80 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
15d90 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
15da0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
15db0 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
15dc0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
15dd0 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
15de0 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
15df0 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
15e00 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
15e10 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
15e20 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
15e30 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
15e40 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
15e50 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
15e60 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
15e70 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
15e80 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
15e90 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
15ea0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
15eb0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
15ec0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
15ed0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
15ee0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
15ef0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
15f00 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
15f10 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
15f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
15f60 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
15f70 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
15f80 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
15f90 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
15fa0 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
15fb0 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
15fc0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
15fd0 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
15fe0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
15ff0 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
16000 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
16010 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
16020 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
16030 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
16040 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
16050 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
16060 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
16070 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
16080 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
16090 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
160a0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
160b0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
160c0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
160d0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
160e0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
160f0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
16100 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
16110 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
16120 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
16130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
16170 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
16180 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
16190 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
161a0 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
161b0 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
161c0 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
161d0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
161e0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
161f0 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
16200 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
16210 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
16220 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16240 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
16250 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
16280 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
16290 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
162c0 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65    134217728 time
162d0 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
162e0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
162f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
16300 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
16310 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
16320 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16340 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
16350 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
16360 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
16370 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
16380 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
16390 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
163a0 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
163b0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
163c0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
163d0 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
163e0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
163f0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
16400 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16420 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
16430 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
16440 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
16470 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
16480 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
164b0 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
164c0 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
164d0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
164e0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
164f0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
16500 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
16510 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
16520 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
16530 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
16540 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
16550 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
16560 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
16570 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
16580 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
16590 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
165a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
165b0 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
165c0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
165d0 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
165e0 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
165f0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
16600 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
16610 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
16620 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
16630 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
16640 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
16650 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
16660 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
16670 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
16680 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
16690 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
166a0 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
166b0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
166c0 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
166d0 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
166e0 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
166f0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
16700 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
16710 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
16720 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
16730 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
16740 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
16750 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
16760 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
16770 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
16780 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
16790 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
167a0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
167b0 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
167c0 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
167d0 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
167e0 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
167f0 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
16800 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
16810 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
16820 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
16830 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
16840 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
16850 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
16860 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
16870 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
16880 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
16890 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
168a0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
168b0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
168c0 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
168d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
168e0 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
168f0 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
16900 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
16910 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
16920 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
16930 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
16940 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
16950 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
16960 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
16970 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
16980 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
16990 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
169a0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
169b0 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
169c0 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
169d0 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
169e0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
169f0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
16a00 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
16a10 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
16a20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
16a30 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
16a40 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
16a50 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
16a60 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
16a70 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
16a80 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
16a90 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
16aa0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
16ab0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
16ac0 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
16ad0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
16ae0 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
16af0 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
16b00 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
16b10 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
16b20 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
16b30 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
16b40 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
16b50 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
16b60 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
16b70 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
16b80 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
16b90 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
16ba0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
16bb0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
16bc0 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
16bd0 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
16be0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
16bf0 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
16c00 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
16c10 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
16c20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
16c30 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
16c40 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  umn */../*.** Co
16c50 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77  mbinations of tw
16c60 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66  o or more EP_* f
16c70 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
16c80 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50  EP_Propagate (EP
16c90 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71  _Collate|EP_Subq
16ca0 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61  uery) /* Propaga
16cb0 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75 70  te these bits up
16cc0 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tree */../*.** 
16cd0 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
16ce0 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
16cf0 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
16d00 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45  bits in the.** E
16d10 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
16d20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
16d30 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
16d40 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
16d50 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
16d60 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
16d70 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
16d80 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
16d90 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
16da0 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
16db0 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
16dc0 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
16dd0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
16de0 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
16df0 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45  &=~(P)../* The E
16e00 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
16e10 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
16e20 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
16e30 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
16e40 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
16e50 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
16e60 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
16e70 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
16e80 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
16e90 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
16ea0 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
16eb0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
16ec0 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
16ed0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
16ee0 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
16ef0 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
16f00 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
16f10 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
16f20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
16f30 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
16f40 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
16f50 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
16f60 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
16f70 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
16f80 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
16f90 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
16fa0 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
16fb0 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20  flags.** and an 
16fc0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
16fd0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
16fe0 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
16ff0 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
17000 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
17010 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
17020 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
17030 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
17040 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
17050 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
17060 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
17070 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
17080 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
17090 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
170a0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
170b0 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
170c0 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
170d0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
170e0 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
170f0 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
17100 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
17110 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61  der comment.** a
17120 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
17130 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
17140 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
17150 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
17160 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
17170 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
17180 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
17190 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
171a0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
171b0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
171c0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
171d0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
171e0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
171f0 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
17200 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
17210 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
17220 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
17230 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
17240 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
17250 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
17260 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
17270 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
17280 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
17290 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
172a0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
172b0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
172c0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
172d0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
172e0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
172f0 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
17300 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
17310 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
17320 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
17330 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
17340 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
17350 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
17360 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
17370 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
17380 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
17390 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
173a0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
173b0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
173c0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
173d0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
173e0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
173f0 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
17400 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
17410 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
17420 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
17430 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
17440 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
17450 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
17460 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
17470 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
17480 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
17490 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
174a0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
174b0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
174c0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
174d0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
174e0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
174f0 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
17500 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
17510 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
17520 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
17530 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
17540 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
17550 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
17560 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
17570 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
17580 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
17590 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
175a0 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
175b0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
175c0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
175d0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
175e0 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
175f0 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
17600 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
17610 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
17620 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
17630 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
17640 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
17650 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
17660 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
17670 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
17680 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
17690 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
176a0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
176b0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
176c0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
176d0 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
176e0 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
176f0 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
17700 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
17710 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
17720 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
17730 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
17740 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
17750 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
17760 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
17770 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
17780 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
17790 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
177a0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
177b0 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
177c0 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
177d0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
177e0 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
177f0 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
17800 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
17810 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
17820 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
17830 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
17840 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
17850 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
17860 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
17890 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
178a0 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
178b0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
178c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
178d0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
178e0 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
178f0 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
17900 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
17910 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
17920 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
17930 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
17940 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
17950 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
17960 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
17970 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
17980 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
17990 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
179a0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
179b0 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
179c0 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
179d0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
179e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
179f0 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
17a00 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
17a10 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
17a20 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
17a30 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
17a40 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
17a50 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
17a60 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
17a70 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
17a80 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
17a90 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
17aa0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
17ab0 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
17ac0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
17ad0 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
17ae0 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
17af0 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
17b00 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
17b10 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
17b20 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
17b30 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
17b40 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
17b50 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
17b60 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
17b70 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
17b80 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
17b90 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
17ba0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
17bb0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
17bc0 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
17bd0 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
17be0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
17bf0 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
17c00 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
17c10 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
17c20 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
17c30 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
17c40 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
17c50 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
17c60 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
17c70 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
17c80 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
17c90 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
17ca0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
17cb0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
17cc0 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
17cd0 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
17ce0 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
17cf0 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
17d00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17d10 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
17d20 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
17d30 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
17d40 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
17d50 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
17d60 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
17d70 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
17d80 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
17d90 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
17da0 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
17db0 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
17dc0 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
17dd0 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
17de0 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
17df0 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
17e00 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
17e10 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
17e20 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
17e30 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  x86..*/.#ifdef S
17e40 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
17e50 50 45 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c  PE.  typedef SQL
17e60 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
17e70 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a   Bitmask;.#else.
17e80 20 20 74 79 70 65 64 65 66 20 75 36 34 20 42 69    typedef u64 Bi
17e90 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f  tmask;.#endif../
17ea0 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
17eb0 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74  of bits in a Bit
17ec0 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61  mask.  "BMS" mea
17ed0 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65  ns "BitMask Size
17ee0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d  "..*/.#define BM
17ef0 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66  S  ((int)(sizeof
17f00 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f  (Bitmask)*8))../
17f10 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20  *.** A bit in a 
17f20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69  Bitmask.*/.#defi
17f30 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20  ne MASKBIT(n)   
17f40 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28  (((Bitmask)1)<<(
17f50 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  n)).#define MASK
17f60 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69  BIT32(n) (((unsi
17f70 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29  gned int)1)<<(n)
17f80 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
17f90 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
17fa0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
17fb0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
17fc0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
17fd0 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
17fe0 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
17ff0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
18000 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
18010 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
18020 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
18030 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
18040 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
18050 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
18060 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
18070 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
18080 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
18090 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
180a0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
180b0 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
180c0 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
180d0 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
180e0 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
180f0 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
18100 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
18110 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
18120 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
18130 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
18140 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
18150 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
18160 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
18170 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
18180 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
18190 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
181a0 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
181b0 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
181c0 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
181d0 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
181e0 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
181f0 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
18200 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
18210 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
18220 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
18230 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
18240 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
18250 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
18260 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
18270 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
18280 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
18290 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
182a0 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
182b0 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
182c0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
182d0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
182e0 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
182f0 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
18300 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
18310 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
18320 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
18330 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
18340 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
18350 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
18360 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
18370 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
18380 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
18390 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
183a0 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
183b0 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
183c0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
183d0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
183e0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
183f0 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
18400 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
18410 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
18420 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
18430 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
18440 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
18450 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
18460 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
18470 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
18480 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
18490 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
184a0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
184b0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
184c0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
184d0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
184e0 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
184f0 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
18500 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
18510 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
18520 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
18530 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
18540 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
18550 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
18560 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
18570 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
18580 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
18590 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
185a0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
185b0 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
185c0 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
185d0 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
185e0 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
185f0 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
18600 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
18610 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
18620 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
18630 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
18640 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
18650 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
18660 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
18670 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
18680 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74  outine */.    st
18690 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20  ruct {.      u8 
186a0 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
186b0 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
186c0 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65  etween this able
186d0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
186e0 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  s */.      unsig
186f0 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
18700 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
18710 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
18720 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
18730 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
18740 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b   isIndexedBy :1;
18750 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
18760 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45  ere is an INDEXE
18770 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  D BY clause */. 
18780 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
18790 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20  TabFunc :1;     
187a0 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65  /* True if table
187b0 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
187c0 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20   syntax */.     
187d0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
187e0 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
187f0 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
18800 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
18810 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
18820 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
18830 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
18840 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
18850 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
18860 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
18870 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
18880 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
18890 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
188a0 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64  .    } fg;.#ifnd
188b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
188c0 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
188d0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
188e0 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
188f0 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
18900 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
18910 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
18920 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
18930 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
18940 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
18950 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
18960 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
18970 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
18980 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
18990 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
189a0 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
189b0 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
189c0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
189d0 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
189e0 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
189f0 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
18a00 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
18a10 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e  s used */.    un
18a20 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72  ion {.      char
18a30 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20   *zIndexedBy;   
18a40 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
18a50 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
18a60 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
18a70 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69   */.      ExprLi
18a80 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f  st *pFuncArg;  /
18a90 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  * Arguments to t
18aa0 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
18ab0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31  tion */.    } u1
18ac0 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42  ;.    Index *pIB
18ad0 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78  Index;  /* Index
18ae0 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
18af0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a  sponding to u1.z
18b00 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d  IndexedBy */.  }
18b10 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
18b20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
18b30 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
18b40 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
18b50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
18b60 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
18b70 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
18b80 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
18b90 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
18ba0 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
18bb0 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
18bc0 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
18bd0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
18be0 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
18bf0 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
18c00 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
18c10 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
18c20 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
18c30 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
18c40 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
18c50 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
18c60 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
18c70 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
18c80 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
18c90 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
18ca0 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
18cb0 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
18cc0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
18cd0 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
18ce0 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
18cf0 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
18d00 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
18d10 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
18d20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
18d30 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
18d40 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
18d50 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
18d60 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
18d70 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
18d80 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
18d90 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
18da0 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
18db0 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
18dc0 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
18dd0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
18de0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
18df0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
18e00 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
18e10 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
18e20 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
18e30 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
18e40 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
18e50 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
18e60 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
18e70 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
18e80 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
18e90 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
18ea0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
18eb0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
18ec0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
18ed0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
18ee0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
18ef0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
18f00 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
18f10 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
18f20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
18f30 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
18f40 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
18f50 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
18f60 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
18f70 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
18f80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
18f90 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
18fa0 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
18fb0 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
18fc0 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
18fd0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
18fe0 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
18ff0 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
19000 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
19010 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
19020 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41 55  fine WHERE_NO_AU
19030 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30 30  TOINDEX     0x00
19040 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20 61  80 /* Disallow a
19050 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
19060 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19070 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
19080 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72     0x0100 /* pOr
19090 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
190a0 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
190b0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
190c0 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
190d0 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  200 /* pOrderby 
190e0 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
190f0 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
19100 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
19110 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
19120 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0400 /* All outp
19130 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
19140 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
19150 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
19160 52 4f 55 50 20 20 20 20 20 20 30 78 30 38 30 30  ROUP      0x0800
19170 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
19180 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
19190 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
191a0 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20  ERE_REOPEN_IDX  
191b0 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54       0x1000 /* T
191c0 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f  ry to use OP_Reo
191d0 70 65 6e 49 64 78 20 2a 2f 0a 23 64 65 66 69 6e  penIdx */.#defin
191e0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
191f0 4d 55 4c 54 49 52 4f 57 20 30 78 32 30 30 30 20  MULTIROW 0x2000 
19200 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b  /* ONEPASS is ok
19210 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
19220 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ows */.#define W
19230 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
19240 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
19250 54 68 65 72 65 20 69 73 20 61 20 63 6f 6e 73 74  There is a const
19260 61 6e 74 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  ant LIMIT clause
19270 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
19280 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
19290 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
192a0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
192b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
192c0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
192d0 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
192e0 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
192f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19300 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
19310 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
19320 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
19330 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
19340 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
19350 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
19360 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
19370 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
19380 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
19390 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
193a0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
193b0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
193c0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
193d0 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
193e0 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
193f0 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
19400 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
19410 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
19420 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
19430 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
19440 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
19450 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
19460 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
19470 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
19480 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
19490 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
194a0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
194b0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
194c0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
194d0 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
194e0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
194f0 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
19500 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
19510 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
19520 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
19530 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
19540 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
19550 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
19560 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
19570 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
19580 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
19590 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
195a0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
195b0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a  he inner-most.**
195c0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
195d0 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
195e0 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
195f0 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
19600 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
19610 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
19620 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
19630 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
19640 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
19650 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
19660 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
19670 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
19680 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
19690 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
196a0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
196b0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
196c0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
196d0 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
196e0 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
196f0 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
19700 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45  emented..**.** E
19710 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
19720 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
19730 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
19740 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
19750 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
19760 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
19770 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
19780 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
19790 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
197a0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
197b0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
197c0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
197d0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
197e0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
197f0 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
19800 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
19810 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
19820 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
19830 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
19840 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
19850 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
19860 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
19870 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
19880 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
19890 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
198a0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
198b0 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
198c0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
198d0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
198e0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
198f0 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
19900 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
19910 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
19920 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
19930 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
19940 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
19950 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
19960 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
19970 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19980 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
19990 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
199a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
199b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
199c0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
199d0 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
199e0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
199f0 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
19a00 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
19a10 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
19a20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
19a30 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
19a40 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
19a50 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
19a60 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
19a70 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20  ld..**.** Note: 
19a80 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75   NC_MinMaxAgg mu
19a90 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  st have the same
19aa0 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e   value as SF_Min
19ab0 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51  MaxAgg and.** SQ
19ac0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
19ad0 2e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ..**.*/.#define 
19ae0 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
19af0 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
19b00 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
19b10 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
19b20 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
19b30 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  g    0x0002  /* 
19b40 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
19b50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19b60 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
19b70 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
19b80 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  004  /* True if 
19b90 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
19ba0 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
19bb0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
19bc0 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
19bd0 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66  0008  /* True if
19be0 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
19bf0 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
19c00 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
19c10 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
19c20 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  10  /* True if r
19c30 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
19c40 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
19c50 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78  /.#define NC_Idx
19c60 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f  Expr   0x0020  /
19c70 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
19c80 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43  ing columns of C
19c90 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
19ca0 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78  define NC_MinMax
19cb0 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d  Agg 0x1000  /* m
19cc0 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65  in/max aggregate
19cd0 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74  s seen.  See not
19ce0 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a  e above */../*.*
19cf0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19d00 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
19d10 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
19d20 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
19d30 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
19d40 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
19d50 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
19d60 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
19d70 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
19d80 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
19d90 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
19da0 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
19db0 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
19dc0 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
19dd0 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
19de0 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
19df0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
19e00 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
19e10 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
19e20 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
19e30 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
19e40 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
19e50 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
19e60 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
19e70 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
19e80 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
19e90 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
19ea0 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
19eb0 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
19ec0 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
19ed0 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
19ee0 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
19ef0 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
19f00 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
19f10 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
19f20 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
19f30 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
19f40 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
19f50 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
19f60 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
19f70 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
19f80 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
19f90 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
19fa0 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
19fb0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
19fc0 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
19fd0 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
19fe0 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
19ff0 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1a000 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1a010 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1a020 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1a030 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1a040 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1a050 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1a060 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1a070 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1a080 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1a090 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1a0a0 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1a0b0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1a0c0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1a0d0 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1a0e0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1a0f0 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1a100 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1a110 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1a120 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1a130 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1a140 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1a150 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1a160 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a180 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1a190 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1a1a0 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1a1b0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1a1c0 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1a1d0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1a1e0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1a1f0 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1a200 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1a210 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1a220 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1a230 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1a240 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1a250 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1a260 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1a270 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  rs */.#if SELECT
1a280 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1a290 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32  char zSelName[12
1a2a0 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c  ];     /* Symbol
1a2b0 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20  ic name of this 
1a2c0 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64  SELECT use for d
1a2d0 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64  ebugging */.#end
1a2e0 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  if.  int addrOpe
1a2f0 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
1a300 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
1a310 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
1a320 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
1a330 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
1a340 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
1a350 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
1a360 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1a370 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1a380 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
1a390 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
1a3a0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
1a3b0 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
1a3c0 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
1a3d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a3e0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
1a3f0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1a400 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
1a410 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1a420 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
1a430 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
1a440 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
1a450 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
1a460 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
1a470 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
1a480 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1a490 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
1a4a0 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
1a4b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
1a4c0 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
1a4d0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
1a4e0 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
1a4f0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
1a500 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
1a510 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
1a520 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1a530 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1a540 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1a550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1a560 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1a570 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1a580 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b  . Or NULL. */.};
1a590 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1a5a0 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1a5b0 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1a5c0 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1a5d0 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1a5e0 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65  ct Flag"..*/.#de
1a5f0 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
1a600 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20         0x00001  
1a610 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
1a620 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
1a630 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20  #define SF_All  
1a640 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
1a650 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74  2  /* Includes t
1a660 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a  he ALL keyword *
1a670 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
1a680 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30  olved       0x00
1a690 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  004  /* Identifi
1a6a0 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
1a6b0 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
1a6c0 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
1a6d0 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20      0x00008  /* 
1a6e0 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
1a6f0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
1a700 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
1a710 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 31  phemeral  0x0001
1a720 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  0  /* Uses the O
1a730 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1a740 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
1a750 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
1a760 20 30 78 30 30 30 32 30 20 20 2f 2a 20 73 71 6c   0x00020  /* sql
1a770 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
1a780 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
1a790 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1a7a0 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30  HasTypeInfo    0
1a7b0 78 30 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d 20  x00040  /* FROM 
1a7c0 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
1a7d0 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
1a7e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1a7f0 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30  pound       0x00
1a800 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  080  /* Part of 
1a810 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
1a820 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
1a830 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78  alues         0x
1a840 30 30 31 30 30 20 20 2f 2a 20 53 79 6e 74 68 65  00100  /* Synthe
1a850 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
1a860 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
1a870 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75  ine SF_MultiValu
1a880 65 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f  e     0x00200  /
1a890 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20  * Single VALUES 
1a8a0 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  term with multip
1a8b0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1a8c0 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
1a8d0 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a       0x00400  /*
1a8e0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
1a8f0 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
1a900 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1a910 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1a920 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 4e 65    0x00800  /* Ne
1a930 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1a940 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1a950 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1a960 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
1a970 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67    0x01000  /* Ag
1a980 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
1a990 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
1a9a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1a9b0 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30  Recursive      0
1a9c0 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72  x02000  /* The r
1a9d0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
1a9e0 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
1a9f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46   */.#define SF_F
1aa00 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78  ixedLimit     0x
1aa10 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63  04000  /* nSelec
1aa20 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f  tRow set by a co
1aa30 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a  nstant LIMIT */.
1aa40 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1aa50 72 74 65 64 20 20 20 20 20 20 30 78 30 38 30 30  rted      0x0800
1aa60 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1aa70 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1aa80 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1aa90 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65  efine SF_Include
1aaa0 48 69 64 64 65 6e 20 20 30 78 31 30 30 30 30 20  Hidden  0x10000 
1aab0 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64   /* Include hidd
1aac0 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75  en columns in ou
1aad0 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  tput */.../*.** 
1aae0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
1aaf0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
1ab00 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
1ab10 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
1ab20 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
1ab30 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1ab40 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
1ab50 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
1ab60 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
1ab70 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
1ab80 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
1ab90 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1aba0 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
1abb0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1abc0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1abd0 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
1abe0 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
1abf0 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1ac00 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1ac10 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
1ac20 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
1ac30 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
1ac40 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1ac50 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
1ac60 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
1ac70 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
1ac80 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
1ac90 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1acb0 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
1acc0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1acd0 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
1ace0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
1acf0 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
1ad00 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
1ad30 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
1ad40 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
1ad50 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
1ad60 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1ad70 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
1ad80 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
1ad90 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1ada0 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
1adb0 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
1adc0 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
1add0 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
1ade0 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
1adf0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1ae00 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
1ae10 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
1ae20 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
1ae30 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
1ae40 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
1ae70 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
1ae80 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
1ae90 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
1aea0 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
1aeb0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1aec0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
1aed0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1aee0 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
1aef0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
1af00 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
1af10 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
1af30 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1af40 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
1af50 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
1af80 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
1af90 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
1afa0 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
1afb0 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
1afc0 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
1afd0 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
1afe0 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
1aff0 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
1b000 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
1b010 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
1b020 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
1b030 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1b060 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1b070 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1b080 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1b090 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1b0a0 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1b0b0 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1b0c0 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1b0d0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1b0e0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1b0f0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1b100 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1b110 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1b130 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1b140 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1b150 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b170 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1b180 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1b190 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1b1a0 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1b1b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1b1c0 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1b1d0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1b1e0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1b210 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1b220 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1b230 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1b240 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1b250 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1b280 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1b290 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1b2a0 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1b2c0 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1b2d0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1b2e0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1b2f0 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1b300 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1b310 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1b320 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1b330 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1b340 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1b350 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1b360 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1b370 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1b380 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1b390 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1b3a0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1b3b0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1b3c0 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1b3d0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1b3e0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1b3f0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1b400 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1b420 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1b430 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1b440 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b460 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1b470 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1b480 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1b490 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1b4a0 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1b4b0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1b4c0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1b4d0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1b4e0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1b4f0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1b500 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1b530 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1b540 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1b550 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1b560 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1b570 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1b580 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1b590 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1b5a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b5b0 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1b5c0 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1b5d0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1b5e0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1b5f0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1b600 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1b610 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1b620 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1b650 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
1b660 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
1b670 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
1b6a0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1b6b0 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
1b6c0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1b6d0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1b6e0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
1b6f0 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
1b700 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1b710 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
1b720 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
1b730 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
1b760 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
1b770 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
1b780 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
1b790 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1b7a0 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
1b7b0 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
1b7c0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1b7d0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
1b7e0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
1b7f0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
1b800 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
1b810 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
1b820 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
1b830 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
1b840 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
1b850 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b860 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
1b870 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
1b880 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
1b890 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
1b8a0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
1b8b0 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
1b8c0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1b8d0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1b8e0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
1b8f0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
1b900 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
1b910 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
1b920 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
1b930 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
1b940 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
1b950 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
1b960 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
1b970 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
1b980 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
1b990 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
1b9a0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1b9b0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1b9c0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1b9d0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1b9e0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1b9f0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1ba00 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1ba10 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1ba20 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1ba30 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1ba40 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1ba50 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1ba60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ba70 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1ba80 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1ba90 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1baa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1bab0 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1bac0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1bad0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1bae0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1baf0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1bb00 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1bb10 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1bb20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1bb30 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1bb40 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1bb50 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1bb60 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1bb70 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1bb80 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1bb90 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1bba0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1bbb0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1bbc0 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1bbd0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1bbe0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1bbf0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1bc00 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1bc10 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1bc20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1bc30 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1bc40 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1bc50 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1bc60 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1bc70 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1bc80 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1bc90 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
1bca0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
1bcb0 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1bcc0 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1bcd0 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
1bce0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
1bcf0 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
1bd00 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
1bd10 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
1bd20 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
1bd30 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1bd40 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
1bd50 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
1bd60 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
1bd70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bd80 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
1bd90 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
1bda0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1bdb0 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1bdc0 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1bdd0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1bde0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1bdf0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1be00 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1be10 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1be20 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1be30 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73  REMENT.** tables
1be40 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1be50 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1be60 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1be70 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1be80 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1be90 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1bea0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1beb0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1bec0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1bed0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1bee0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1bef0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1bf00 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1bf10 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1bf20 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1bf30 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69  s are done withi
1bf40 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1bf50 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1bf60 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1bf70 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1bf80 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1bf90 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1bfa0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1bfb0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1bfc0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1bfd0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1bfe0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1bff0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1c000 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1c010 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1c020 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1c030 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1c040 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1c050 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1c060 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1c070 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c090 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1c0a0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1c0b0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1c0c0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1c0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1c0e0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1c0f0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1c100 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1c110 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1c120 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1c130 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c140 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1c150 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1c160 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1c170 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1c180 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1c190 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1c1a0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1c1b0 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74  ed for each.** t
1c1c0 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1c1d0 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1c1e0 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1c1f0 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1c200 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1c210 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1c220 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1c230 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1c240 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1c250 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1c260 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1c270 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1c280 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1c290 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1c2a0 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1c2b0 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1c2c0 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1c2d0 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1c2e0 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1c2f0 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1c300 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1c310 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1c320 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1c330 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1c340 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1c350 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1c360 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1c370 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1c380 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1c390 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1c3a0 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1c3b0 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1c3c0 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1c3d0 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1c3e0 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1c3f0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1c400 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1c410 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1c420 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1c430 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1c440 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1c450 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1c460 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20  lt of INSERT.** 
1c470 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
1c480 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
1c490 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1c4a0 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
1c4b0 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
1c4c0 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1c4d0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
1c4e0 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
1c4f0 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
1c500 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
1c510 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
1c520 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
1c530 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
1c540 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1c550 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
1c560 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73  xt entry in Pars
1c570 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1c580 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  st */.  SubProgr
1c590 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
1c5a0 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
1c5b0 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
1c5c0 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74  /orconf */.  int
1c5d0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1c5e0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1c5f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1c600 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c  cy */.  u32 aCol
1c610 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20  mask[2];        
1c620 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e  /* Masks of old.
1c630 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  *, new.* columns
1c640 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a   accessed */.};.
1c650 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
1c660 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
1c670 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
1c680 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1c690 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
1c6a0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1c6b0 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75  D>30.  typedef u
1c6c0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62  nsigned char yDb
1c6d0 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58  Mask[(SQLITE_MAX
1c6e0 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b  _ATTACHED+9)/8];
1c6f0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1c700 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1c710 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28  M)[(I)/8]&(1<<((
1c720 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65  I)&7)))!=0).# de
1c730 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1c740 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28  M)      memset((
1c750 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a  M),0,sizeof(M)).
1c760 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1c770 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b  et(M,I)     (M)[
1c780 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29  (I)/8]|=(1<<((I)
1c790 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  &7)).# define Db
1c7a0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1c7b0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
1c7c0 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e  lZero(M).# defin
1c7d0 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1c7e0 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d  M)   (sqlite3DbM
1c7f0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30  askAllZero(M)==0
1c800 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ).#else.  typede
1c810 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
1c820 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65  DbMask;.# define
1c830 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1c840 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62      (((M)&(((yDb
1c850 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d  Mask)1)<<(I)))!=
1c860 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1c870 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28  skZero(M)      (
1c880 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  M)=0.# define Db
1c890 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1c8a0 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b   (M)|=(((yDbMask
1c8b0 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69  )1)<<(I)).# defi
1c8c0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1c8d0 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64  (M)   (M)==0.# d
1c8e0 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1c8f0 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a  ero(M)   (M)!=0.
1c900 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1c910 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
1c920 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
1c930 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1c940 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
1c950 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
1c960 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
1c970 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
1c980 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
1c990 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
1c9a0 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
1c9b0 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
1c9c0 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
1c9d0 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
1c9e0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
1c9f0 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
1ca00 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
1ca10 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
1ca20 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
1ca30 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
1ca40 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
1ca50 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
1ca60 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
1ca70 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
1ca80 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
1ca90 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
1caa0 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
1cab0 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
1cac0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
1cad0 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
1cae0 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
1caf0 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
1cb00 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
1cb10 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  che.** feature i
1cb20 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
1cb30 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
1cb40 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
1cb50 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
1cb60 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1cb70 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
1cb80 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
1cb90 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
1cba0 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
1cbb0 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
1cbc0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
1cbd0 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
1cbe0 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
1cbf0 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
1cc00 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
1cc10 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
1cc20 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
1cc30 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1cc40 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
1cc50 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
1cc60 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
1cc70 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
1cc80 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
1cc90 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
1cca0 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
1ccb0 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1ccd0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1cce0 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
1ccf0 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
1cd00 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
1cd10 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
1cd20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
1cd30 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
1cd40 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
1cd50 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
1cd60 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
1cd70 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
1cd80 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
1cd90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cda0 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
1cdb0 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
1cdc0 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
1cdd0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
1cde0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
1cdf0 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
1ce00 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
1ce10 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
1ce20 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
1ce30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1ce40 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
1ce50 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
1ce60 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
1ce70 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
1ce80 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1ce90 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
1cea0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
1ceb0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
1cec0 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
1ced0 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
1cee0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1cef0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1cf00 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e  () */.  u8 okCon
1cf10 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20  stFactor;    /* 
1cf20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74  OK to factor out
1cf30 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
1cf40 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73  u8 disableLookas
1cf50 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ide; /* Number o
1cf60 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64  f times lookasid
1cf70 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62  e has been disab
1cf80 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  led */.  int aTe
1cf90 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
1cfa0 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
1cfb0 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
1cfc0 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
1cfd0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1cfe0 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
1cff0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1d000 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1d010 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
1d020 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1d030 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
1d040 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1d050 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1d060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d070 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
1d080 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
1d090 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d0a0 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
1d0b0 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
1d0c0 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
1d0d0 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1d0e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d0f0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
1d100 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1d110 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
1d120 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d130 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
1d140 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
1d150 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
1d160 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
1d170 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
1d180 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1d190 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
1d1a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
1d1b0 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
1d1c0 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1d1d0 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b    int szOpAlloc;
1d1e0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
1d1f0 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
1d200 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1d210 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1d220 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20  t iFixedOp;     
1d230 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b     /* Never back
1d240 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69   out opcodes iFi
1d250 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69  xedOp-1 or earli
1d260 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61  er */.  int ckBa
1d270 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  se;          /* 
1d280 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66  Base register of
1d290 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65   data during che
1d2a0 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
1d2b0 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
1d2c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
1d2d0 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68  e of an index wh
1d2e0 6f 73 65 20 65 78 70 72 73 20 61 72 65 20 62 65  ose exprs are be
1d2f0 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69  ing coded */.  i
1d300 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
1d310 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
1d320 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
1d330 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
1d340 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
1d350 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
1d360 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
1d370 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
1d380 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
1d390 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1d3a0 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
1d3b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1d3c0 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20  abels used */.  
1d3d0 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20  int *aLabel;    
1d3e0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f       /* Space to
1d3f0 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73   hold the labels
1d400 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f   */.  struct yCo
1d410 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
1d420 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
1d430 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
1d440 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1d450 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   i16 iColumn;   
1d460 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1d470 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
1d480 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
1d490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
1d4a0 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
1d4b0 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
1d4c0 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
1d4d0 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
1d4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
1d4f0 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
1d500 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
1d510 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
1d520 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
1d530 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
1d540 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
1d550 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
1d560 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
1d570 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
1d580 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
1d590 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
1d5a0 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
1d5b0 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
1d5c0 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
1d5d0 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
1d5e0 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  y */.  ExprList 
1d5f0 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
1d600 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1d610 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
1d620 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
1d630 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1d640 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
1d650 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
1d660 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
1d670 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
1d680 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
1d690 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
1d6a0 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
1d6b0 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
1d6c0 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
1d6d0 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
1d6e0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1d6f0 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b  int cookieValue[
1d700 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1d710 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75  HED+2];  /* Valu
1d720 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f  es of cookies to
1d730 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74   verify */.  int
1d740 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1d750 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1d760 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1d770 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1d780 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1d790 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1d7a0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1d7b0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1d7c0 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1d7d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1d7e0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1d7f0 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1d800 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1d810 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1d820 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1d830 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1d840 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1d850 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1d860 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1d870 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  een */.  int nSe
1d880 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a  lectIndent;   /*
1d890 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65   How far to inde
1d8a0 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29  nt SELECTTRACE()
1d8b0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1d8c0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1d8d0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1d8e0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1d8f0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1d900 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1d910 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1d920 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1d930 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1d940 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1d950 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1d960 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1d970 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1d980 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1d990 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1d9a0 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1d9b0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
1d9c0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
1d9d0 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
1d9e0 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
1d9f0 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
1da00 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
1da10 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
1da20 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
1da30 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
1da40 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
1da50 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
1da60 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1da70 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64   for */.  int ad
1da80 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
1da90 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
1daa0 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1dab0 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
1dac0 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  LE */.  u32 nQue
1dad0 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
1dae0 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
1daf0 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
1db00 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
1db10 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
1db20 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1db30 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
1db40 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1db50 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
1db60 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1db70 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1db80 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
1db90 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
1dba0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
1dbb0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
1dbc0 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
1dbd0 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
1dbe0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1dbf0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1dc00 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
1dc10 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
1dc20 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
1dc30 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
1dc40 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
1dc50 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
1dc60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dc70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dc80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dc90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
1dca0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
1dcb0 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
1dcc0 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
1dcd0 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
1dce0 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
1dcf0 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
1dd00 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
1dd10 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
1dd20 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
1dd30 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
1dd40 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61  fsetof(Parse,nVa
1dd50 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66  r) so the nVar f
1dd60 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
1dd70 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a   first field.  *
1dd80 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  * in the recursi
1dd90 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
1dda0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ddb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ddc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ddd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dde0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e 56 61 72 20  *****/..  ynVar 
1ddf0 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
1de00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1de10 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
1de20 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
1de30 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1de40 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1de50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1de60 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74  f available slot
1de70 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a  s in azVar[] */.
1de80 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
1de90 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
1dea0 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
1deb0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1dec0 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  EY */.  u8 expla
1ded0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1dee0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1def0 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1df00 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1df10 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1df20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1df30 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1df40 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1df50 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1df60 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1df70 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1df80 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1df90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1dfa0 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1dfb0 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1dfc0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1dfd0 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1dfe0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1dff0 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1e000 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1e010 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e030 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1e040 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1e050 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1e060 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1e070 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1e080 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1e090 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1e0a0 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1e0b0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1e0c0 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1e0d0 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1e0e0 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1e0f0 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1e100 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1e110 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1e120 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1e130 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1e140 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1e150 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1e160 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1e170 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1e180 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1e190 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1e1a0 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1e1b0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1e1c0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1e1d0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1e1e0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1e1f0 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1e200 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1e210 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1e220 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1e230 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1e240 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1e250 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1e260 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1e270 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1e280 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1e290 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1e2a0 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1e2b0 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1e2c0 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1e2d0 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1e2e0 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1e2f0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1e300 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1e310 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1e320 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1e330 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1e340 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1e350 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1e360 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e370 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1e380 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1e390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1e3a0 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1e3b0 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1e3c0 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1e3d0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1e3e0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1e3f0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1e400 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1e410 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1e420 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1e430 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1e440 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1e450 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1e460 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1e470 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1e480 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1e490 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1e4a0 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1e4b0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1e4c0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1e4d0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1e4e0 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
1e4f0 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
1e500 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
1e510 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
1e520 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
1e530 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  arse */.};../*.*
1e540 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1e550 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1e560 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1e570 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1e580 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1e590 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1e5a0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1e5b0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1e5c0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1e5d0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1e5e0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1e5f0 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1e600 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1e610 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1e620 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1e630 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1e640 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1e650 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1e660 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1e670 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1e680 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1e690 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1e6a0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1e6b0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1e6c0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1e6d0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1e6e0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1e6f0 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1e700 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1e710 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1e720 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1e730 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1e740 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1e750 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1e760 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1e770 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1e780 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1e790 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20    /* OP_Insert: 
1e7a0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
1e7b0 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20  ->nChange */.   
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69    /* Also used i
1e7f0 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66  n P2 (not P5) of
1e800 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64   OP_Delete */.#d
1e810 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
1e820 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
1e830 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
1e840 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
1e850 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
1e860 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
1e870 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20  WID     0x02    
1e880 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
1e890 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
1e8a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e8b0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
1e8c0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
1e8d0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
1e8e0 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
1e8f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
1e900 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
1e910 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
1e920 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
1e930 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
1e940 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
1e950 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
1e960 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
1e970 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
1e980 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
1e990 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
1e9a0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
1e9b0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1e9c0 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
1e9d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e9e0 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
1e9f0 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
1ea00 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1ea10 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
1ea20 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
1ea30 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
1ea40 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
1ea50 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
1ea60 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
1ea70 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b  fine OPFLAG_SEEK
1ea80 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20  EQ        0x02  
1ea90 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63    /* OP_Open** c
1eaa0 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65  ursor uses EQ se
1eab0 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ek only */.#defi
1eac0 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  ne OPFLAG_FORDEL
1ead0 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20  ETE     0x08    
1eae0 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c  /* OP_Open shoul
1eaf0 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44  d use BTREE_FORD
1eb00 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
1eb10 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1eb20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
1eb30 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
1eb40 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
1eb50 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
1eb60 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
1eb70 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1eb80 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
1eb90 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
1eba0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1ebb0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
1ebc0 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44   0x02    /* OP_D
1ebd0 65 6c 65 74 65 3a 20 6b 65 65 70 20 63 75 72 73  elete: keep curs
1ebe0 6f 72 20 70 6f 73 69 74 69 6f 6e 20 2a 2f 0a 23  or position */.#
1ebf0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
1ec00 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
1ec10 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
1ec20 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
1ec30 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a  ETE op */../*. *
1ec40 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
1ec50 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
1ec60 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
1ec70 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
1ec80 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
1ec90 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20  ct Trigger.. *. 
1eca0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
1ecb0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
1ecc0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
1ecd0 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
1ece0 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
1ecf0 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
1ed00 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
1ed10 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
1ed20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20  represents the. 
1ed30 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
1ed40 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
1ed50 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
1ed60 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
1ed70 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
1ed80 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
1ed90 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
1eda0 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
1edb0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
1edc0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
1edd0 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
1ede0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
1edf0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
1ee00 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1ee10 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
1ee20 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
1ee30 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
1ee40 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1ee50 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
1ee60 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
1ee70 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
1ee80 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
1ee90 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1eea0 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
1eeb0 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
1eec0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
1eed0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
1eee0 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
1eef0 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
1ef00 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
1ef10 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
1ef20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1ef30 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
1ef40 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1ef60 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
1ef70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1ef80 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
1ef90 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
1efa0 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
1efb0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1efc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1efd0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1efe0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1eff0 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
1f000 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
1f010 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1f020 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
1f030 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
1f040 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
1f050 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f060 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
1f070 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1f080 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
1f090 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
1f0a0 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
1f0b0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
1f0c0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
1f0d0 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1f100 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
1f110 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1f120 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1f130 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
1f140 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1f150 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
1f160 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
1f170 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
1f180 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1f190 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
1f1a0 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
1f1b0 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
1f1c0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
1f1d0 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
1f1e0 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
1f1f0 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
1f200 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
1f210 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
1f220 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
1f230 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
1f240 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
1f250 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
1f260 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
1f270 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
1f280 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
1f290 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49  e which..**.** I
1f2a0 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
1f2b0 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
1f2c0 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
1f2d0 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
1f2e0 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
1f2f0 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
1f300 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
1f310 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
1f320 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
1f330 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
1f340 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1f350 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
1f360 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1f370 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1f380 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
1f390 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
1f3a0 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
1f3b0 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
1f3c0 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
1f3d0 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  am.. *. * Instan
1f3e0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1f3f0 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
1f400 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
1f410 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
1f420 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
1f430 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
1f440 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
1f450 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
1f460 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a  member of the. *
1f470 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1f480 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1f490 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1f4a0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1f4b0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1f4c0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1f4d0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1f4e0 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65  ogram.. *. * The
1f4f0 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
1f500 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
1f510 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
1f520 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
1f530 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
1f540 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
1f550 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
1f560 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
1f570 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
1f580 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20  by the. * value 
1f590 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
1f5a0 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
1f5b0 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
1f5c0 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
1f5d0 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
1f5e0 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
1f5f0 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
1f600 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1f610 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
1f620 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
1f630 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1f640 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1f650 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
1f660 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1f670 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
1f680 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20  ULL.. * zTarget 
1f690 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
1f6a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1f6b0 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
1f6c0 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1f6d0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1f6e0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
1f6f0 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
1f700 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1f710 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1f720 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
1f730 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
1f740 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1f750 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
1f760 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1f770 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
1f780 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
1f790 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20  S .... *        
1f7a0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
1f7b0 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
1f7c0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
1f7d0 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
1f7e0 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
1f7f0 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
1f800 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
1f810 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1f820 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1f830 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
1f840 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
1f850 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1f860 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1f870 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
1f880 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1f890 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1f8a0 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1f8b0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28  se NULL.. *. * (
1f8c0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1f8d0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1f8e0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1f8f0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
1f900 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65  pdate.. * pWhere
1f910 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1f920 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
1f930 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
1f940 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1f950 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1f960 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1f970 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
1f980 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
1f990 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
1f9a0 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
1f9b0 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
1f9c0 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
1f9d0 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
1f9e0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
1f9f0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
1fa00 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
1fa20 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72  ment.. *. */.str
1fa30 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1fa40 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
1fa50 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1fa60 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1fa70 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1fa80 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
1fa90 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
1faa0 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
1fab0 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
1fac0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
1fad0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
1fae0 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
1faf0 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
1fb00 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
1fb10 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
1fb20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
1fb30 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
1fb40 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
1fb50 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
1fb60 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
1fb70 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1fb80 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1fb90 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1fba0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1fbb0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1fbc0 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1fbd0 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1fbe0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1fbf0 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1fc00 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1fc10 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1fc20 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1fc30 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1fc40 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1fc50 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1fc60 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1fc70 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1fc80 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1fc90 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1fca0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1fcb0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1fcc0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1fcd0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1fce0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1fcf0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1fd00 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1fd10 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1fd20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1fd30 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1fd40 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1fd50 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1fd60 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
1fd70 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1fd80 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1fd90 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1fda0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1fdb0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1fdc0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1fdd0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1fde0 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1fdf0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1fe00 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1fe10 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1fe20 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
1fe30 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
1fe40 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
1fe50 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
1fe60 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1fe70 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
1fe80 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
1fe90 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
1fea0 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
1feb0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1fec0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
1fed0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
1fee0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1fef0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1ff00 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
1ff10 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
1ff20 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
1ff30 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
1ff40 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
1ff50 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
1ff60 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
1ff70 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
1ff80 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
1ff90 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
1ffa0 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
1ffb0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
1ffc0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
1ffd0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
1ffe0 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
1fff0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
20000 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
20010 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
20020 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
20030 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
20040 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
20050 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
20060 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
20070 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
20080 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
20090 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
200a0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
200b0 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
200c0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
200d0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
200e0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20  so far */.  u32 
200f0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
20100 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
20110 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
20120 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20   zText */.  u32 
20130 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
20140 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
20150 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
20160 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
20170 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20   usage */.  u8  
20180 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
20190 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
201a0 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
201b0 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
201c0 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
201d0 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
201e0 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
201f0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
20200 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
20210 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
20220 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65  OOBIG  2.#define
20230 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
20240 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a  NTERNAL 0x01  /*
20250 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e   Internal-use-on
20260 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c  ly converters al
20270 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
20280 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53   SQLITE_PRINTF_S
20290 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a  QLFUNC  0x02  /*
202a0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72   SQL function ar
202b0 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69  guments to VXPri
202c0 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntf */.#define S
202d0 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
202e0 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54  LOCED 0x04  /* T
202f0 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20  rue if xText is 
20300 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
20310 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61  */..#define isMa
20320 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29  lloced(X)  (((X)
20330 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20  ->printfFlags & 
20340 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
20350 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a  LLOCED)!=0).../*
20360 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
20370 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
20380 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
20390 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
203a0 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
203b0 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
203c0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
203d0 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
203e0 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
203f0 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
20400 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
20410 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
20420 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
20430 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
20440 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
20450 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
20460 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
20470 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
20480 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
20490 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
204a0 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
204b0 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
204c0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
204d0 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
204e0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
204f0 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
20500 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
20510 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
20520 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
20530 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
20540 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
20550 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
20560 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
20570 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
20580 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
20590 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
205a0 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
205d0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
205e0 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
205f0 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
20600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20610 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
20620 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
20630 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20650 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
20660 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
20670 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
20680 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
20690 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
206a0 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
206b0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
206c0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
206d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206e0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
206f0 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
20700 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
20710 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
20720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20730 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
20740 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
20750 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
20760 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
20770 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
20780 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
20790 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
207a0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
207c0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
207d0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
207e0 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
207f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20800 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
20810 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
20820 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
20830 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
20840 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
20850 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
20860 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
20870 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
20880 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
20890 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
208a0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
208b0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
208c0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
208d0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
208e0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
208f0 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
20900 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
20910 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
20920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
20930 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
20940 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20960 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
20970 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
20980 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
20990 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
209a0 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
209b0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
209c0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
209d0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
209e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
209f0 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
20a00 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
20a10 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
20a20 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
20a30 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
20a40 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
20a50 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
20a60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20a70 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
20a80 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
20a90 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20ab0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
20ac0 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
20ad0 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20af0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20b00 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
20b10 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
20b20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20b30 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
20b40 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
20b50 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b70 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
20b80 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
20b90 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
20ba0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20bc0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
20bd0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
20be0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20c00 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
20c10 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
20c20 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
20c30 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
20c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
20c50 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
20c60 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
20c70 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
20ca0 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
20cb0 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
20cc0 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
20cd0 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
20ce0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
20cf0 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
20d00 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
20d10 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
20d20 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
20d30 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
20d40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20d50 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
20d60 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
20d70 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
20d80 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
20d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20da0 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
20db0 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
20dc0 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
20dd0 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20df0 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
20e00 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
20e10 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
20e20 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
20e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20e40 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
20e50 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
20e60 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
20e70 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
20e80 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
20e90 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
20ea0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
20eb0 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ed0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
20ee0 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
20ef0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
20f00 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
20f10 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
20f20 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
20f30 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
20f40 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
20f50 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
20f60 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
20f70 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
20f80 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
20f90 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
20fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
20fb0 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
20fc0 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
20fd0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
20fe0 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
20ff0 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
21000 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21010 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
21020 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
21030 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
21040 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
21050 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
21060 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
21070 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
21080 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
21090 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
210a0 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
210b0 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
210c0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
210d0 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
210e0 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
210f0 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
21100 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
21110 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
21120 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
21130 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
21140 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
21170 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
21180 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
21190 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
211a0 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78  N_TEST.  int (*x
211b0 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
211c0 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
211d0 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
211e0 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
211f0 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
21200 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
21210 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
21220 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
21230 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b  me() calls */.};
21240 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
21250 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
21260 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
21270 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
21280 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
21290 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
212a0 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
212b0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
212c0 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
212d0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
212e0 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
212f0 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
21300 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
21310 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
21320 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
21330 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
21340 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
21350 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
21360 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
21370 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
21380 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
21390 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
213a0 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
213b0 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
213c0 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
213d0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
213e0 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
213f0 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
21400 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
21410 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
21420 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
21430 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
21440 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
21450 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
21460 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
21470 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
21480 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
21490 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
214a0 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
214b0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
214c0 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
214d0 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
214e0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
214f0 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
21500 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
21530 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
21540 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
21550 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
21560 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
21570 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
21580 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
21590 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
215a0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
215b0 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
215c0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
215d0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
215e0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
215f0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
21600 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
21610 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
21620 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
21630 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21650 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
21660 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
21670 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21690 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
216a0 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
216b0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
216c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
216e0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
216f0 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
21700 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
21710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
21730 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
21740 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
21750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21770 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
21780 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
217b0 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
217c0 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
217d0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
21800 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
21810 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
21820 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
21830 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
21840 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
21850 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
21860 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
21870 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
21880 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
21890 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
218a0 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
218b0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
218c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218d0 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f    /* array of co
218e0 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a  lumn indexes */.
218f0 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
21900 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
21910 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
21920 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
21930 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
21940 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
21950 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
21960 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21970 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
21980 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
21990 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
219a0 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
219b0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
219c0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
219d0 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
219e0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
219f0 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f  qlite3ExprWalkNo
21a00 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  op(Walker*, Expr
21a10 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
21a20 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
21a30 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
21a40 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
21a50 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
21a60 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
21a70 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
21a80 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
21a90 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
21aa0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
21ab0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
21ac0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
21ad0 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
21ae0 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
21af0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
21b00 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
21b10 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
21b20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
21b30 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
21b40 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
21b50 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
21b60 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
21b70 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
21b80 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
21b90 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
21ba0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
21bb0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
21bc0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
21bd0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
21be0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21bf0 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
21c00 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
21c10 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c30 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
21c40 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
21c50 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
21c60 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
21c70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
21c80 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
21c90 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
21ca0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
21cb0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
21cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
21cd0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
21ce0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
21cf0 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
21d00 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
21d10 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
21d20 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
21d30 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
21d40 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
21d50 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
21d60 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
21d70 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
21d80 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
21d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
21da0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
21db0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
21dc0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
21dd0 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
21de0 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
21df0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
21e00 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
21e10 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
21e20 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
21e30 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
21e40 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
21e50 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
21e60 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
21e70 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
21e80 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
21e90 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
21ea0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
21eb0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
21ec0 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
21ed0 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
21ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
21ef0 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
21f00 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
21f10 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
21f20 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
21f30 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
21f40 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
21f50 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
21f60 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
21f70 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
21f80 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
21f90 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
21fa0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
21fb0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
21fc0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
21fd0 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
21fe0 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
22000 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
22010 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22030 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
22040 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
22050 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
22060 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
22070 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
220b0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
220c0 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
220d0 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
220e0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
220f0 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
22100 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
22110 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
22120 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
22130 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
22140 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
22150 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
22160 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
22170 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
22180 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
22190 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
221a0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
221b0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
221c0 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
221d0 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
221e0 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
221f0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
22200 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
22210 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
22220 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22230 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
22240 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
22250 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
22260 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
22270 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
22280 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
22290 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
222a0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
222b0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
222c0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
222d0 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
222e0 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
222f0 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ).#ifdef SQLITE_
22300 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69  DEBUG.  int sqli
22310 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  te3NomemError(in
22320 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
22330 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
22340 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
22350 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
22360 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  T sqlite3NomemEr
22370 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
22380 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
22390 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ERR_NOMEM_BKPT s
223a0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
223b0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
223c0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
223d0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
223e0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
223f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
22400 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
22410 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
22420 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  M.#endif../*.** 
22430 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
22440 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
22450 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
22460 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
22470 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22480 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
22490 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
224a0 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
224b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
224c0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
224d0 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
224e0 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
224f0 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
22500 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
22510 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22520 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
22530 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
22540 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
22550 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
22560 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
22570 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
22580 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
22590 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
225a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
225b0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
225c0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
225d0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
225e0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
225f0 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
22600 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
22610 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
22620 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
22630 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
22640 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
22650 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
22660 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
22670 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
22680 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
22690 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
226a0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
226b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
226c0 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
226d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
226e0 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
226f0 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
22700 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
22710 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
22720 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
22730 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
22740 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
22750 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
22760 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
22770 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
22780 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
22790 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
227a0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
227b0 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
227c0 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
227d0 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
227e0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
227f0 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
22800 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
22810 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
22820 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
22830 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
22840 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
22850 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
22860 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
22870 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
22880 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
22890 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
228a0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
228b0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
228c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
228d0 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
228e0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
228f0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
22900 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
22910 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
22920 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22930 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
22940 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
22950 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22960 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
22970 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
22980 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
22990 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
229a0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
229b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
229c0 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
229d0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
229e0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
229f0 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
22a00 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
22a10 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
22a20 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
22a30 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
22a40 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
22a50 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
22a60 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
22a70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
22a80 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
22a90 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
22aa0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
22ab0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
22ac0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
22ad0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
22ae0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22af0 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
22b00 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
22b10 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
22b20 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
22b30 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
22b40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
22b50 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
22b60 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
22b70 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
22b80 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
22b90 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
22ba0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
22bb0 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
22bc0 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
22bd0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
22be0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
22bf0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
22c00 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
22c10 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
22c20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
22c30 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
22c40 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
22c50 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
22c60 69 74 65 33 53 74 72 4e 65 78 74 28 63 6f 6e 73  ite3StrNext(cons
22c70 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
22c80 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
22c90 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
22ca0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
22cb0 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
22cc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
22cd0 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
22ce0 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
22cf0 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
22d00 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
22d10 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
22d20 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
22d30 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
22d40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
22d50 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
22d60 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
22d70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
22d80 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  wNN(sqlite3*, u6
22d90 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
22da0 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
22db0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
22dc0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
22dd0 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
22de0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
22df0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
22e00 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
22e10 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
22e20 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
22e30 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
22e40 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
22e50 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
22e60 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
22e70 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
22e80 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
22e90 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
22ea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
22eb0 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
22ec0 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
22ed0 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
22ee0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
22ef0 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
22f00 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
22f10 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
22f20 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
22f30 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
22f40 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
22f50 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
22f60 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
22f70 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
22f80 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  oid);.#ifndef SQ
22f90 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
22fa0 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69  N_TEST.void sqli
22fb0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
22fc0 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
22fd0 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
22fe0 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
22ff0 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
23000 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
23010 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
23020 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
23030 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
23040 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
23050 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
23060 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
23070 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
23080 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
23090 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
230a0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
230b0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
230c0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
230d0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
230e0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
230f0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
23100 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
23110 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
23120 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
23130 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
23140 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
23150 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
23160 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
23170 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
23180 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
23190 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
231a0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
231b0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
231c0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
231d0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
231e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
231f0 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
23200 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
23210 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
23220 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
23230 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
23240 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
23250 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
23260 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
23270 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
23280 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
23290 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
232a0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
232b0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
232c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
232d0 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
232e0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
232f0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
23300 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
23310 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
23320 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
23330 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
23340 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
23350 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
23360 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
23370 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
23380 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
23390 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
233a0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
233b0 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
233c0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
233d0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
233e0 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
233f0 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
23400 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
23410 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
23420 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
23430 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
23440 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23450 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
23460 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
23470 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
23480 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
23490 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
234a0 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
234b0 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
234c0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
234d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
234e0 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
234f0 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
23500 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
23510 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
23520 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
23530 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
23540 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
23550 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
23560 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
23570 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
23580 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73  int);../* Access
23590 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64   to mutexes used
235a0 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74   by sqlite3_stat
235b0 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f  us() */.sqlite3_
235c0 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63  mutex *sqlite3Pc
235d0 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29  ache1Mutex(void)
235e0 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  ;.sqlite3_mutex 
235f0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75  *sqlite3MallocMu
23600 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e  tex(void);..#ifn
23610 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23620 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
23630 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
23640 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
23650 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23660 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
23670 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
23680 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
23690 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
236a0 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
236b0 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
236c0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
236d0 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
236e0 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
236f0 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
23700 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
23710 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
23720 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23740 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
23750 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
23760 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
23770 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23780 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
23790 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
237a0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
237b0 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
237c0 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
237d0 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c   */.};..void sql
237e0 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
237f0 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
23800 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
23810 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
23820 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
23830 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
23840 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
23850 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
23860 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
23870 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
23880 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
23890 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
238a0 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
238b0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
238c0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
238d0 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
238e0 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
238f0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
23900 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
23910 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
23920 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
23930 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
23940 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
23950 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
23960 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
23970 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
23980 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
23990 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
239a0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
239b0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
239c0 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
239d0 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
239e0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
239f0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
23a00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23a10 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
23a20 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
23a30 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
23a40 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
23a50 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
23a60 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
23a70 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
23a80 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
23a90 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
23aa0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
23ab0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
23ac0 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
23ad0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
23ae0 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
23af0 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
23b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
23b10 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
23b20 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
23b30 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
23b40 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
23b50 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
23b60 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
23b70 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
23b80 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
23b90 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
23ba0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
23bb0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
23bc0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
23bd0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
23be0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
23bf0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23c00 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
23c10 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
23c20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
23c30 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
23c40 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
23c50 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
23c60 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
23c70 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
23c80 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
23c90 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
23ca0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
23cb0 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
23cc0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
23cd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23ce0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
23cf0 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
23d00 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
23d10 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
23d20 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
23d30 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
23d40 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
23d50 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
23d60 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
23d70 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
23d80 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
23d90 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
23da0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
23db0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
23dc0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
23dd0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
23de0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
23df0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
23e00 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
23e10 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
23e20 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
23e30 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
23e40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23e50 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
23e60 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
23e70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23e80 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
23e90 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
23ea0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
23eb0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
23ec0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
23ed0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
23ee0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23ef0 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
23f00 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
23f10 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
23f20 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
23f30 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
23f40 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
23f50 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
23f60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
23f70 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
23f80 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
23f90 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
23fa0 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
23fb0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23fc0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
23fd0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
23fe0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
23ff0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
24000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
24010 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
24020 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
24030 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
24040 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
24050 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
24060 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
24070 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
24080 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
24090 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
240a0 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
240b0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
240c0 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
240d0 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
240e0 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
240f0 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  **);.Table *sqli
24100 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
24110 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
24120 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
24130 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
24140 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
24150 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
24160 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
24170 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
24180 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
24190 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
241a0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
241b0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
241c0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
241d0 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
241e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
241f0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
24200 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
24210 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
24220 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
24230 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
24240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
24250 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
24260 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
24270 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
24280 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
24290 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
242a0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
242b0 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
242c0 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
242d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
242e0 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
242f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
24300 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24310 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
24320 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
24330 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
24340 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
24350 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
24360 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
24370 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
24380 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
24390 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
243a0 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
243b0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
243c0 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
243d0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
243e0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
243f0 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
24400 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
24420 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
24430 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
24440 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
24450 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
24460 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
24470 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
24480 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  ce(Parse *);..#i
24490 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
244a0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20  _BUILTIN_TEST.# 
244b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
244c0 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
244d0 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
244e0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
244f0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
24500 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
24510 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
24520 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
24530 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
24540 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
24550 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c  BitvecTestNotNul
24560 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  l(Bitvec*, u32);
24570 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
24580 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
24590 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
245a0 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
245b0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
245c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
245d0 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
245e0 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
245f0 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
24600 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  vec*);.#ifndef S
24610 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
24620 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  IN_TEST.int sqli
24630 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
24640 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
24650 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
24660 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
24670 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
24680 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
24690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
246a0 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
246b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
246c0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
246d0 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
246e0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
246f0 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69  t(RowSet*, int i
24700 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
24710 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
24720 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
24730 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
24740 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
24750 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
24760 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
24770 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
24780 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
24790 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
247a0 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
247b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
247c0 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
247d0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
247e0 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
247f0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
24800 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24810 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
24820 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
24830 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
24840 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
24850 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
24860 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
24870 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24880 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
24890 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
248a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
248b0 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
248c0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
248d0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
248e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
248f0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
24900 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
24910 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
24920 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
24930 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
24940 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
24950 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
24960 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
24970 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
24980 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
24990 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
249a0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
249b0 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
249c0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
249d0 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
249e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
249f0 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
24a00 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  rcList*, Select*
24a10 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
24a20 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
24a30 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
24a40 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
24a50 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
24a60 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
24a70 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
24a80 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
24a90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
24aa0 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
24ab0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24ac0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
24ad0 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
24ae0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
24af0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
24b00 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
24b10 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
24b20 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
24b30 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
24b40 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
24b50 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
24b60 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
24b70 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
24b80 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
24bb0 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
24bc0 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
24bd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
24be0 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
24bf0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
24c00 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
24c10 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
24c20 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
24c30 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
24c40 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
24c50 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
24c60 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
24c70 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
24c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
24c90 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
24ca0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
24cb0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
24cc0 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
24cd0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
24ce0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
24cf0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
24d00 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
24d10 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
24d20 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
24d30 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
24d40 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
24d50 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
24d60 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
24d70 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20  ,char**);.Index 
24d80 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
24d90 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
24da0 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
24db0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
24dc0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24de0 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
24df0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24e00 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
24e10 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
24e20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
24e30 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
24e40 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
24e50 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
24e60 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
24e70 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
24e80 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
24e90 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24eb0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
24ec0 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u32,Expr*,Expr*)
24ed0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
24ee0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
24ef0 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
24f00 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
24f10 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
24f20 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
24f30 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
24f40 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
24f50 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
24f60 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
24f70 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
24f80 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
24f90 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
24fa0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
24fb0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
24fc0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
24fd0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
24fe0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
24ff0 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
25000 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
25010 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
25020 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
25030 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
25040 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
25050 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
25060 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
25070 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
25080 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
25090 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
250a0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
250b0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
250c0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
250d0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
250e0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
250f0 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
25100 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
25110 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
25120 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
25130 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
25140 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
25150 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
25160 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
25170 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
25180 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
25190 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
251a0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
251b0 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
251c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
251d0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
251e0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
251f0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
25200 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
25210 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
25220 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
25230 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
25240 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
25250 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
25260 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
25270 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
25280 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
25290 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
252a0 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
252b0 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
252c0 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
252d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
252e0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
252f0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
25300 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
25310 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
25320 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
25330 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
25340 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
25350 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
25360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25370 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
25380 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
25390 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
253a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
253b0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
253c0 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61  ToReg(Parse*, Ta
253d0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
253e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
253f0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
25400 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
25410 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
25420 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25430 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
25440 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
25450 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25460 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
25470 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
25480 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
25490 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
254a0 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
254b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
254c0 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
254d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
254e0 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
254f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
25500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25510 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
25520 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25530 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
25540 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
25550 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25560 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
25570 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
25580 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25590 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
255a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
255b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
255c0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
255d0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
255e0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
255f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
25600 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
25610 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
25620 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
25630 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
25640 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
25650 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
25660 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
25670 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
25680 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
25690 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
256a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
256b0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
256c0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
256d0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
256e0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
256f0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
25700 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
25710 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
25720 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
25730 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
25740 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
25750 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
25760 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
25770 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
25780 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
25790 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
257a0 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
257b0 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
257c0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
257d0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
257e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
257f0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
25800 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
25810 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25820 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
25830 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
25840 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
25850 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
25860 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
25870 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
25880 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
25890 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
258a0 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
258b0 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
258c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
258d0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
258e0 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
258f0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
25900 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
25910 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
25920 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
25930 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25940 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25950 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25960 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
25970 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
25980 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
25990 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
259a0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
259b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
259c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
259d0 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
259e0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
259f0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
25a00 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
25a10 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
25a20 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
25a30 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
25a40 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
25a50 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
25a60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25a70 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
25a80 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
25a90 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
25aa0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
25ab0 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a  mpliesExpr(Expr*
25ac0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
25ad0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
25ae0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
25af0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
25b00 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
25b10 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
25b20 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
25b30 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
25b40 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
25b50 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
25b60 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
25b70 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
25b80 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
25b90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25ba0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76  T_BUILTIN_TEST.v
25bb0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
25bc0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
25bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
25be0 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
25bf0 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  d);.#endif.void 
25c00 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
25c10 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
25c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
25c30 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
25c40 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
25c50 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
25c60 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
25c70 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
25c80 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
25c90 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
25ca0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
25cb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25cc0 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
25cd0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
25ce0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
25cf0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
25d00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25d10 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
25d20 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
25d30 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
25d40 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
25d50 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
25d60 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
25d70 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
25d80 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
25d90 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
25da0 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
25db0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
25dc0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
25dd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25de0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
25df0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
25e00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25e10 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
25e20 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
25e30 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25e40 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
25e50 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
25e60 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
25e70 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
25e80 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
25e90 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
25ea0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
25eb0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
25ec0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
25ed0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
25ee0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
25ef0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
25f00 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
25f10 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
25f20 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25f30 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
25f40 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
25f50 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
25f60 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
25f70 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
25f80 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
25f90 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
25fa0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
25fb0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25fc0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25fd0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
25fe0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
25ff0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
26000 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
26010 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26020 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
26030 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
26040 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
26050 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
26060 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
26070 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
26080 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
260c0 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
260d0 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
260e0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
260f0 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
26100 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
26110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
26120 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
26130 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
26140 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
26150 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
26160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
26170 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
26180 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
26190 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
261a0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
261b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
261c0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
261d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
261e0 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
261f0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
26200 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
26210 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
26220 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
26230 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
26240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
26250 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
26260 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
26270 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
26280 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
26290 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
262a0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
262b0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
262c0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
262d0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
262e0 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
262f0 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
26300 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
26310 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
26320 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
26330 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
26340 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
26350 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
26360 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  );.#if SELECTTRA
26370 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20  CE_ENABLED.void 
26380 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
26390 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e  Name(Select*,con
263a0 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
263b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
263c0 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41  3SelectSetName(A
263d0 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
263e0 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69  sqlite3InsertBui
263f0 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65  ltinFuncs(FuncDe
26400 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  f*,int);.FuncDef
26410 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
26420 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
26430 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75  onst char*,int,u
26440 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
26450 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
26460 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  inFunctions(void
26470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26480 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
26490 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
264a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
264b0 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f  sterPerConnectio
264c0 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  nBuiltinFunction
264d0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
264e0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
264f0 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
26500 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
26510 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
26520 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
26530 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
26540 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
26550 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
26560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
26570 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
26580 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
26590 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
265a0 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
265b0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
265c0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
265d0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
265e0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
265f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
26600 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
26610 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
26620 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
26630 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
26660 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
26670 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
26680 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
26690 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
266a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
266b0 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
266c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
266d0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
266e0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
266f0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
26700 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
26710 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
26720 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
26730 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
26740 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
26750 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
26760 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
26770 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
26780 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26790 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
267a0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
267b0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
267c0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
267d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
267f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
26800 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
26810 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
26820 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
26830 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
26840 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
26850 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
26860 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
26870 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
26880 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
26890 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
268a0 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
268b0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
268c0 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
268d0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
268e0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
268f0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
26900 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
26910 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
26920 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
26930 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
26940 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
26970 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
26980 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
26990 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
269a0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
269b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
269c0 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
269d0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
269e0 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
269f0 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
26a00 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
26a10 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
26a20 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
26a30 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
26a40 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
26a50 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
26a60 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
26a70 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
26a80 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
26a90 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
26aa0 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
26ab0 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
26ac0 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
26ad0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
26ae0 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
26af0 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
26b00 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
26b10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26b20 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  sToplevel(p) ((p
26b30 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29  )->pToplevel==0)
26b40 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26b50 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
26b60 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
26b70 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
26b80 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
26b90 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
26ba0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
26bb0 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
26bc0 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
26bd0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
26be0 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
26bf0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
26c00 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
26c10 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
26c20 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
26c30 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
26c40 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
26c50 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
26c60 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
26c70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
26c80 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
26c90 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
26ca0 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
26cb0 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
26cc0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
26cd0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
26ce0 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
26cf0 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
26d00 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
26d10 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
26d20 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
26d30 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
26d40 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
26d50 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
26d60 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26d70 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
26d80 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
26d90 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26da0 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
26db0 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
26dc0 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
26dd0 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
26de0 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
26df0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
26e00 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
26e10 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
26e20 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
26e30 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
26e40 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
26e50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
26e60 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
26e70 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
26e80 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
26e90 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
26ea0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
26eb0 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
26ec0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
26ed0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
26ee0 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
26ef0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
26f00 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
26f10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
26f20 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
26f30 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
26f40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26f50 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
26f60 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
26f70 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
26f80 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
26f90 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
26fa0 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
26fb0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26fc0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
26fd0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
26fe0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
26ff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
27000 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
27010 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
27020 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
27030 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
27040 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
27050 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
27060 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
27070 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
27080 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
27090 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
270a0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
270b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
270c0 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
270d0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
270e0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
270f0 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
27100 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
27110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
27120 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
27130 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
27140 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
27150 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
27160 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
27170 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
27180 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
27190 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
271a0 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
271b0 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
271c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
271d0 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
271e0 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
271f0 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
27200 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
27210 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
27220 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
27230 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
27240 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
27250 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
27260 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27270 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
27280 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
27290 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
272a0 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  le);.#endif.#if 
272b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
272c0 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
272d0 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20  TATUS) || \.    
272e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
272f0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
27300 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64  TAT4) || \.    d
27310 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58  efined(SQLITE_EX
27320 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f  PLAIN_ESTIMATED_
27330 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65  ROWS).u64 sqlite
27340 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
27350 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Est);.#endif../*
27360 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
27370 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
27380 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
27390 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
273a0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
273b0 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
273c0 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
273d0 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
273e0 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
273f0 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
27400 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
27410 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
27420 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
27430 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
27440 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
27450 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
27460 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
27470 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
27480 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
27490 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
274a0 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
274b0 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
274c0 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
274d0 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
274e0 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
274f0 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
27500 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
27510 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
27520 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
27530 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
27540 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
27550 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
27560 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
27570 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
27580 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
27590 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
275a0 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
275b0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
275c0 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
275d0 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
275e0 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
275f0 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
27600 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
27610 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
27620 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
27630 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
27640 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
27650 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
27660 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
27670 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
27680 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
27690 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
276a0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
276b0 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
276c0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
276d0 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
276e0 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
276f0 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
27700 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
27710 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
27720 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
27730 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
27740 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
27750 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
27760 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
27770 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
27780 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
27790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
277a0 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
277b0 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
277c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
277d0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
277e0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
277f0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
27800 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
27810 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
27820 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
27830 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
27840 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
27850 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
27860 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
27870 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
27880 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
27890 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
278a0 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
278b0 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
278c0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
278d0 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
278e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45  fined(SQLITE_NEE
278f0 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73  D_ERR_NAME).cons
27900 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
27910 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
27920 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
27930 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
27940 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27950 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
27960 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
27970 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
27980 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
27990 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
279a0 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
279b0 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
279c0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
279d0 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
279e0 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
279f0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
27a00 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
27a10 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
27a20 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
27a30 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
27a40 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
27a50 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
27a60 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
27a70 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
27a80 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
27a90 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
27aa0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
27ab0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
27ac0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
27ad0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
27ae0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
27af0 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
27b00 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
27b10 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
27b20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
27b30 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
27b40 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
27b50 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
27b60 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
27b70 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
27b80 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
27b90 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
27ba0 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
27bb0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
27bc0 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
27bd0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
27be0 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
27bf0 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
27c00 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
27c10 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
27c20 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
27c30 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
27c40 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
27c50 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
27c60 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
27c70 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  u8);..const void
27c80 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
27c90 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
27ca0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
27cb0 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
27cc0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
27cd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
27ce0 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
27cf0 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
27d00 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
27d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
27d30 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
27d40 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75  qlite3ValueSetNu
27d50 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ll(sqlite3_value
27d60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27d70 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65  ValueFree(sqlite
27d80 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74  3_value*);.sqlit
27d90 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
27da0 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
27db0 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  3 *);.char *sqli
27dc0 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69  te3Utf16to8(sqli
27dd0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  te3 *, const voi
27de0 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  d*, int, u8);.in
27df0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
27e00 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
27e10 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
27e20 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
27e30 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
27e40 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
27e50 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
27e60 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
27e70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
27e80 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
27e90 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
27ea0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
27eb0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
27ec0 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
27ed0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
27ee0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
27ef0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
27f00 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
27f10 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
27f20 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
27f30 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
27f40 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
27f50 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
27f60 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
27f70 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
27f80 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
27f90 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
27fa0 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
27fb0 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
27fc0 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
27fd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27fe0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
27ff0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
28000 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
28010 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
28020 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
28030 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
28040 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28050 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
28060 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
28070 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
28080 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
28090 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
280a0 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
280b0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
280c0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
280d0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
280e0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
280f0 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
28100 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
28110 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
28120 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
28130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28140 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
28150 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
28160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
28170 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
28180 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
28190 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
281a0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
281b0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
281c0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
281d0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
281e0 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
281f0 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
28200 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
28210 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
28220 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
28230 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
28240 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
28250 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
28260 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
28270 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
28280 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
28290 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
282a0 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
282b0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
282c0 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
282d0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
282e0 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
282f0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
28300 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
28310 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
28320 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
28330 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
28340 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
28350 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
28360 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
28370 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
28380 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
28390 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
283a0 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
283b0 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
283c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
283d0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
283e0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
283f0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
28400 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
28410 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
28420 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
28430 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
28440 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
28450 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
28460 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
28470 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
28480 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
28490 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
284a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
284b0 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
284c0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
284d0 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
284e0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
284f0 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
28500 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
28510 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
28520 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
28530 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
28540 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
28550 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
28560 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
28570 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
28580 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
28590 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
285a0 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
285b0 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
285c0 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
285d0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
285e0 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
285f0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
28600 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
28610 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
28620 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
28630 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28640 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
28650 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
28660 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
28670 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
28680 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
28690 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
286a0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
286b0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
286c0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
286d0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
286e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
286f0 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
28700 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
28710 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
28720 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
28730 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
28740 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
28750 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
28760 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28770 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
28780 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
28790 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
287a0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
287b0 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
287c0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
287d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
287e0 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  d *,.  void (*)(
287f0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
28800 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
28810 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
28820 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
28830 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
28840 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20  value **), void 
28850 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
28860 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
28870 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
28880 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c  ctor.);.void sql
28890 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
288a0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
288b0 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
288c0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
288d0 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
288e0 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
288f0 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
28900 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
28910 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
28920 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
28930 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
28940 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
28950 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28960 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
28970 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
28980 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
28990 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
289a0 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
289b0 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
289c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
289d0 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75  pendChar(StrAccu
289e0 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68  m*,int,char);.ch
289f0 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
28a00 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
28a10 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
28a20 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
28a30 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
28a40 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
28a50 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
28a60 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
28a70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
28a80 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
28a90 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
28aa0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
28ab0 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
28ac0 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
28ad0 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
28ae0 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
28af0 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
28b00 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
28b10 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20   u8 *);..#ifdef 
28b20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
28b30 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
28b40 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
28b50 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
28b60 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
28b70 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50  4ProbeSetValue(P
28b80 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
28b90 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
28ba0 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29  pr*,u8,int,int*)
28bb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
28bc0 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  t4ValueFromExpr(
28bd0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
28be0 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
28bf0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
28c00 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28  3Stat4ProbeFree(
28c10 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29  UnpackedRecord*)
28c20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
28c30 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33  t4Column(sqlite3
28c40 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
28c50 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65  int, int, sqlite
28c60 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64  3_value**);.#end
28c70 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
28c80 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
28c90 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
28ca0 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
28cb0 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
28cc0 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29  c(void*(*)(u64))
28cd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
28ce0 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
28cf0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
28d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
28d10 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ser(void*, int, 
28d20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a  Token, Parse*);.
28d30 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
28d40 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
28d50 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
28d60 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
28d70 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
28d80 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
28d90 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
28da0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28db0 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
28dc0 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
28dd0 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
28de0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
28df0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28e00 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
28e10 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
28e20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28e30 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
28e40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
28e50 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
28e60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
28e70 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
28e80 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
28e90 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
28ea0 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
28eb0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
28ec0 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
28ed0 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
28ee0 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
28ef0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
28f00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28f10 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
28f20 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
28f30 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
28f40 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
28f50 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
28f60 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
28f70 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
28f80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
28f90 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
28fa0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
28fb0 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
28fc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
28fd0 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  abLock(X).#  def
28fe0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
28ff0 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
29000 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
29010 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
29020 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
29030 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
29040 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
29050 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
29060 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
29070 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
29080 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
29090 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
290a0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
290b0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
290c0 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
290d0 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
290e0 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
290f0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
29100 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
29110 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
29120 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
29130 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
29140 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
29150 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
29160 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
29170 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
29180 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
29190 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
291a0 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
291b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
291c0 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
291d0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
291e0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
291f0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
29200 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
29210 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
29220 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
29230 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
29240 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
29250 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
29260 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64  *, Table*);.#  d
29270 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
29280 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
29290 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
292a0 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
292b0 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
292c0 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
292d0 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
292e0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
292f0 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
29300 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
29310 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
29320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
29330 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
29340 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
29350 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
29360 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
29370 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
29380 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
29390 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
293a0 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
293b0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
293c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
293d0 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
293e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
293f0 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
29400 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
29410 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
29420 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
29430 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
29440 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
29450 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
29460 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
29470 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
29480 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
29490 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
294a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
294b0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
294c0 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
294d0 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
294e0 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
294f0 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
29500 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
29510 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
29520 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29530 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
29540 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
29550 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
29560 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
29570 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
29580 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
29590 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
295a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
295b0 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
295c0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
295d0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
295e0 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
295f0 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
29600 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
29610 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
29620 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
29630 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
29640 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
29650 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29660 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
29670 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
29680 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
29690 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
296a0 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
296b0 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
296c0 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
296d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
296e0 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
296f0 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
29700 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
29710 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
29720 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
29730 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
29740 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
29750 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
29760 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
29770 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
29780 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
29790 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
297a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
297b0 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
297c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
297d0 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
297e0 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
297f0 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
29800 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
29810 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29820 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
29830 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
29840 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
29850 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
29860 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
29870 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
29880 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
29890 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
298a0 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
298b0 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
298c0 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
298d0 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
298e0 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
298f0 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
29900 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
29910 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
29920 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
29930 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
29940 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
29950 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
29960 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
29970 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
29980 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
29990 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
299a0 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
299b0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
299c0 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
299d0 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
299e0 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
299f0 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
29a00 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a  ctionality is.**
29a10 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
29a20 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
29a30 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
29a40 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
29a50 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
29a60 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
29a70 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
29a80 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
29a90 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
29aa0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
29ab0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
29ac0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
29ad0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
29ae0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29af0 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
29b00 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
29b10 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
29b20 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
29b30 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
29b40 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
29b50 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
29b60 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
29b70 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
29b80 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
29b90 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
29ba0 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
29bb0 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
29bc0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
29bd0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
29be0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29bf0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
29c00 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
29c10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
29c20 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
29c30 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
29c40 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
29c50 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
29c60 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
29c70 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
29c80 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29c90 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
29ca0 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66  c,d)    0.#endif
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 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
29cd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
29ce0 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
29cf0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
29d00 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
29d10 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
29d20 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
29d30 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
29d40 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29d50 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
29d60 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29d70 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
29d80 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
29d90 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
29da0 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
29db0 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
29dc0 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
29dd0 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
29de0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
29df0 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
29e00 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
29e10 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
29e20 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
29e30 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
29e40 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
29e50 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
29e60 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
29e70 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
29e80 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
29e90 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
29ea0 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  ent if SQLITE_OM
29eb0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
29ec0 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
29ed0 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
29ee0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
29ef0 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  N_TEST.  void sq
29f00 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
29f10 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
29f20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
29f30 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
29f40 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
29f50 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
29f60 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
29f70 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
29f80 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
29f90 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
29fa0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
29fb0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
29fc0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a  3FindInIndex().*
29fd0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
29fe0 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
29ff0 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68  1   /* Search th
2a000 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
2a010 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
2a020 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
2a030 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61        2   /* Sea
2a040 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rch an ephemeral
2a050 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69   b-tree */.#defi
2a060 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
2a070 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20  X_ASC    3   /* 
2a080 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41  Existing index A
2a090 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
2a0a0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
2a0b0 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a  EX_DESC   4   /*
2a0c0 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
2a0d0 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64  DESCENDING */.#d
2a0e0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
2a0f0 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20  OOP         5   
2a100 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69  /* No table avai
2a110 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61  lable. Use compa
2a120 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20  risons */./*.** 
2a130 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f  Allowed flags fo
2a140 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65  r the 3rd parame
2a150 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69  ter to sqlite3Fi
2a160 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a  ndInIndex()..*/.
2a170 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2a180 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30  _NOOP_OK     0x0
2a190 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65  001  /* OK to re
2a1a0 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  turn IN_INDEX_NO
2a1b0 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  OP */.#define IN
2a1c0 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49  _INDEX_MEMBERSHI
2a1d0 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e  P  0x0002  /* IN
2a1e0 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66   operator used f
2a1f0 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65  or membership te
2a200 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  st */.#define IN
2a210 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20  _INDEX_LOOP     
2a220 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e     0x0004  /* IN
2a230 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61   operator used a
2a240 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20  s a loop */.int 
2a250 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2a260 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
2a270 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a   *, u32, int*);.
2a280 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2a290 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2a2a0 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
2a2b0 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
2a2c0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2a2d0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2a2e0 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
2a2f0 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  fs *);.#ifdef SQ
2a300 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
2a310 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
2a320 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
2a330 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
2a340 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74   *);.#endif..int
2a350 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49   sqlite3JournalI
2a360 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65  sInMemory(sqlite
2a370 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64  3_file *p);.void
2a380 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
2a390 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
2a3a0 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
2a3b0 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
2a3c0 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
2a3d0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2a3e0 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
2a3f0 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
2a400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
2a410 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
2a420 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
2a430 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2a440 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
2a450 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
2a460 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
2a470 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
2a480 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2a490 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
2a4a0 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
2a4b0 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
2a4c0 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
2a4d0 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
2a4e0 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
2a4f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2a500 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
2a510 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
2a520 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2a530 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
2a540 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
2a550 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2a560 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
2a570 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
2a580 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2a590 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
2a5a0 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
2a5b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2a5c0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
2a5d0 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
2a5e0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
2a5f0 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
2a600 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
2a610 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
2a620 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2a630 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
2a640 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2a650 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
2a660 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
2a670 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
2a680 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
2a690 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
2a6a0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2a6b0 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
2a6c0 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
2a6d0 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
2a6e0 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
2a6f0 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
2a700 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a  acing messages..
2a710 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2a720 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
2a730 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2a740 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
2a750 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
2a760 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
2a770 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
2a780 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
2a790 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
2a7a0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
2a7b0 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
2a7c0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
2a7d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
2a7e0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a7f0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
2a800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
2a810 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
2a820 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2a830 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
2a840 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
2a850 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
2a860 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
2a870 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
2a880 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
2a890 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
2a8a0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
2a8b0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
2a8c0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
2a8d0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
2a8e0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
2a8f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2a900 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
2a910 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
2a920 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
2a930 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
2a940 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
2a950 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
2a960 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
2a970 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
2a980 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
2a990 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2a9a0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
2a9b0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
2a9c0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
2a9d0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2a9e0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2a9f0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2aa00 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2aa10 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2aa20 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
2aa30 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2aa40 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
2aa50 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
2aa60 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2aa70 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
2aa80 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
2aa90 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2aaa0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
2aab0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2aac0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2aad0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2aae0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2aaf0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2ab00 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
2ab10 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
2ab20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
2ab30 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
2ab40 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
2ab50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
2ab60 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
2ab70 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
2ab80 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
2ab90 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
2aba0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
2abb0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
2abc0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
2abd0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
2abe0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
2abf0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
2ac00 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
2ac10 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
2ac20 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
2ac30 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
2ac40 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
2ac50 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
2ac60 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
2ac70 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
2ac80 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
2ac90 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
2aca0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
2acb0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
2acc0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
2acd0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
2ace0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
2acf0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2ad00 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
2ad10 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  his constraint..
2ad20 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
2ad30 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
2ad40 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
2ad50 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
2ad60 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
2ad70 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
2ad80 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
2ad90 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
2ada0 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
2adb0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
2adc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
2add0 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
2ade0 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2adf0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2ae00 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2ae10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2ae20 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
2ae30 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
2ae40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2ae50 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
2ae60 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
2ae70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2ae80 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
2ae90 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
2aea0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2aeb0 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
2aec0 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
2aed0 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
2aee0 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
2aef0 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
2af00 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2af10 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
2af20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74   0x02  /* Heap t
2af30 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2af40 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f  een lookaside */
2af50 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2af60 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
2af70 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
2af80 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
2af90 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
2afa0 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
2afb0 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
2afc0 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
2afd0 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
2afe0 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
2aff0 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
2b000 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
2b010 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
2b020 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
2b030 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
2b040 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
2b050 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
2b060 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
2b070 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
2b080 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2b090 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
2b0a0 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
2b0b0 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
2b0c0 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
2b0d0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
2b0e0 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
2b0f0 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
2b100 20 2a 2f 0a                                       */.