/ Hex Artifact Content
Login

Artifact 84c673f27b77dfbd367cb3ed1de8b6f3b73102dc:


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: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3d70: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3d80: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
3d90: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
3da0: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
3db0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
3dc0: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
3dd0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3de0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
3df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
3e00: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
3e10: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
3e20: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
3e30: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
3e40: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
3e50: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
3e60: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
3e70: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
3e80: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
3e90: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
3ea0: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
3eb0: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
3ec0: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
3ed0: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
3ee0: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
3ef0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
3f00: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
3f10: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
3f20: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
3f30: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
3f40: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
3f50: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
3f60: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
3f70: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
3f80: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
3f90: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3fa0: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
3fb0: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
3fc0: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
3fd0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
3fe0: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
3ff0: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4000: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4010: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
4020: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
4030: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
4040: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
4050: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
4060: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
4070: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4080: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4090: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
40a0: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
40b0: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
40c0: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
40d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
40e0: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
40f0: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4100: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
4110: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
4120: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
4130: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
4140: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
4150: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
4160: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
4170: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4180: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
4190: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
41a0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
41b0: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
41c0: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
41d0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
41e0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
41f0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
4200: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
4210: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
4220: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
4230: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
4240: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
4250: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
4260: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
4270: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
4280: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
4290: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
42a0: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
42b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
42c0: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
42d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
42e0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
42f0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
4300: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
4310: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
4320: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
4330: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
4340: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
4350: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
4360: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
4370: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
4380: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
4390: 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  er.** to omit co
43a0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
43b0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
43c0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
43d0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
43e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
43f0: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
4400: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
4410: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
4420: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
4430: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
4440: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
4450: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
4460: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
4470: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
4480: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
4490: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
44a0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
44b0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
44c0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
44d0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
44e0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
44f0: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
4500: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
4510: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
4520: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
4530: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
4540: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
4550: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
4560: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
4570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4580: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
4590: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
45a0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
45b0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
45c0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
45d0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
45e0: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
45f0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
4600: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
4610: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
4620: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
4630: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
4640: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4650: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
4660: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
4670: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
4680: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
4690: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
46a0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
46b0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
46c0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
46d0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
46e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
46f0: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
4700: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
4710: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4720: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
4730: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
4740: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
4750: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20  if../*.** If no 
4760: 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 70  value has been p
4770: 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c 49  rovided for SQLI
4780: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4790: 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20  READS, or if.** 
47a0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
47b0: 45 20 69 73 20 73 65 74 20 74 6f 20 33 20 28 6e  E is set to 3 (n
47c0: 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72 61  ever use tempora
47d0: 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20 69  ry files), set i
47e0: 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f  t.** to zero..*/
47f0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  .#if SQLITE_TEMP
4800: 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c  _STORE==3 || SQL
4810: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 3d  ITE_THREADSAFE==
4820: 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  0.# undef SQLITE
4830: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4840: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
4850: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4860: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
4870: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
4880: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4890: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define 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 20 38 0a 23 65 6e 64 69 66 0a 23 69  EADS 8.#endif.#i
48c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
48d0: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
48e0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
48f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4900: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
4910: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
4920: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
4930: 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58  READS>SQLITE_MAX
4940: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
4950: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
4960: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4970: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
4980: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4990: 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46 41  EADS SQLITE_DEFA
49a0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
49b0: 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  DS.#endif../*.**
49c0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e 69   The default ini
49d0: 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  tial allocation 
49e0: 66 6f 72 20 74 68 65 20 70 61 67 65 63 61 63 68  for the pagecach
49f0: 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65 70  e when using sep
4a00: 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61 63  arate.** pagecac
4a10: 68 65 73 20 66 6f 72 20 65 61 63 68 20 64 61 74  hes for each dat
4a20: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
4a30: 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e 75  .  A positive nu
4a40: 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e  mber is the.** n
4a50: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e 20  umber of pages. 
4a60: 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   A negative numb
4a70: 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e  er N translation
4a80: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 62  s means that a b
4a90: 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32  uffer.** of -102
4aa0: 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c 6c  4*N bytes is all
4ab0: 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65 64 20  ocated and used 
4ac0: 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67 65  for as many page
4ad0: 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c  s as it will hol
4ae0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
4af0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
4b00: 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66  CHE_INITSZ.# def
4b10: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4b20: 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a  LT_PCACHE_INITSZ
4b30: 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   100.#endif../*.
4b40: 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20  ** GCC does not 
4b50: 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65  define the offse
4b60: 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77  tof() macro so w
4b70: 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20  e'll have to do 
4b80: 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e  it.** ourselves.
4b90: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73  .*/.#ifndef offs
4ba0: 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66  etof.#define off
4bb0: 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c  setof(STRUCTURE,
4bc0: 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63  FIELD) ((int)((c
4bd0: 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52  har*)&((STRUCTUR
4be0: 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23  E*)0)->FIELD)).#
4bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
4c00: 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d  ros to compute m
4c10: 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d  inimum and maxim
4c20: 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72  um of two number
4c30: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49  s..*/.#define MI
4c40: 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f  N(A,B) ((A)<(B)?
4c50: 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65  (A):(B)).#define
4c60: 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28   MAX(A,B) ((A)>(
4c70: 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a  B)?(A):(B))../*.
4c80: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
4c90: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
4ca0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
4cb0: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
4cc0: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
4cd0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
4ce0: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
4cf0: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
4d00: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
4d10: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
4d20: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
4d30: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
4d40: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
4d50: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
4d60: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
4d70: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
4d80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
4d90: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
4da0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
4db0: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
4dc0: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
4dd0: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
4de0: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
4df0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
4e00: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
4e10: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
4e20: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
4e30: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
4e40: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
4e50: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
4e60: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
4e70: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
4e80: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
4e90: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
4ea0: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
4eb0: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
4ec0: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
4ed0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
4ee0: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
4ef0: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
4f00: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4f10: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
4f20: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
4f30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4f40: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
4f50: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
4f60: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
4f70: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
4f80: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
4f90: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
4fa0: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
4fb0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
4fc0: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
4fd0: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
4fe0: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
4ff0: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
5000: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
5010: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5020: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
5030: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5040: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5050: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5060: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5070: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5080: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5090: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
50a0: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
50b0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
50c0: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
50d0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
50e0: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
50f0: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5100: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5110: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5120: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5130: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5140: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5150: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5160: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5170: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5180: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
51a0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
51b0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
51c0: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
51d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
51e0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
51f0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5200: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5220: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5230: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5240: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5250: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5260: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5270: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5280: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
52a0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
52b0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
52c0: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
52d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
52e0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
52f0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5300: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5320: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5330: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5340: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5350: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5360: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5370: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5380: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5390: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
53a0: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
53b0: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
53c0: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
53d0: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
53e0: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
53f0: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5400: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5410: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5420: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5430: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5440: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5450: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5460: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5470: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
5480: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
5490: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
54a0: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
54b0: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
54c0: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
54d0: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
54e0: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
54f0: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
5500: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
5510: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
5520: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
5530: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
5540: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
5550: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5560: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
5570: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
5580: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
5590: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
55a0: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
55b0: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
55c0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
55d0: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
55e0: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
55f0: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
5600: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
5610: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
5620: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
5630: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
5640: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
5650: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
5660: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
5670: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
5680: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
5690: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
56a0: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
56b0: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
56c0: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
56d0: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
56e0: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
56f0: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
5700: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
5710: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
5720: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
5730: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
5740: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
5750: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
5760: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
5770: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
5780: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
5790: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
57a0: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
57b0: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
57c0: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
57d0: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
57e0: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
57f0: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
5800: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
5810: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
5820: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
5830: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
5840: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
5860: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
5870: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
5880: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
5890: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
58a0: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
58b0: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
58c0: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
58d0: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
58e0: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
58f0: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
5900: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
5910: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
5920: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
5930: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
5940: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
5950: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
5960: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
5970: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
5980: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
5990: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
59a0: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
59b0: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
59c0: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
59d0: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
59e0: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
59f0: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
5a00: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
5a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
5a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
5a30: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
5a40: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
5a50: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
5a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
5a70: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
5a80: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
5a90: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
5aa0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
5ab0: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
5ac0: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
5ad0: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5ae0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5af0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5b00: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5b10: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
5b20: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
5b30: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
5b40: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
5b50: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5b60: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
5b70: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
5b80: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
5b90: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
5ba0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
5bb0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
5bc0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
5bd0: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
5be0: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
5bf0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
5c00: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
5c10: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
5c20: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
5c30: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
5c40: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
5c50: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
5c60: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
5c70: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
5c80: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
5c90: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
5ca0: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
5cb0: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
5cc0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5cd0: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
5ce0: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
5cf0: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
5d00: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
5d10: 69 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36  if (defined(i386
5d20: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5d30: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
5d40: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
5d50: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
5d60: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
5d70: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
5d80: 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  _64__) || define
5d90: 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20  d(_M_X64)  ||   
5da0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
5db0: 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66  _M_AMD64) || def
5dc0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20  ined(_M_ARM)    
5dd0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
5de0: 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  6)   ||    \.   
5df0: 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f    defined(__arm_
5e00: 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _)) && !defined(
5e10: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5e20: 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69  YTEORDER).# defi
5e30: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
5e40: 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65  DER    1234.# de
5e50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
5e60: 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66  NDIAN    0.# def
5e70: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
5e80: 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69  EENDIAN 1.# defi
5e90: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
5ea0: 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54  ATIVE  SQLITE_UT
5eb0: 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66  F16LE.#endif.#if
5ec0: 20 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29   (defined(sparc)
5ed0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5ee0: 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20  _ppc__))  \.    
5ef0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
5f00: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
5f10: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
5f20: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5f30: 20 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65     4321.# define
5f40: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
5f50: 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20  N    1.# define 
5f60: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
5f70: 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IAN 0.# define S
5f80: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
5f90: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  E  SQLITE_UTF16B
5fa0: 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  E.#endif.#if !de
5fb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54  fined(SQLITE_BYT
5fc0: 45 4f 52 44 45 52 29 0a 23 20 69 66 64 65 66 20  EORDER).# ifdef 
5fd0: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
5fe0: 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  ION.  const int 
5ff0: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
6000: 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20  # else.  extern 
6010: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6020: 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20  3one;.# endif.# 
6030: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6040: 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20 20  TEORDER    0    
6050: 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b   /* 0 means "unk
6060: 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d  nown at compile-
6070: 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e  time" */.# defin
6080: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6090: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
60a0: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
60b0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
60c0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
60d0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
60e0: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
60f0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6100: 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f  NATIVE  (SQLITE_
6110: 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45  BIGENDIAN?SQLITE
6120: 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f  _UTF16BE:SQLITE_
6130: 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a  UTF16LE).#endif.
6140: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73  ./*.** Constants
6150: 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74   for the largest
6160: 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f   and smallest po
6170: 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69  ssible 64-bit si
6180: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a  gned integers..*
6190: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61  * These macros a
61a0: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77  re designed to w
61b0: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
61c0: 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
61d0: 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69   64-bit.** compi
61e0: 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lers..*/.#define
61f0: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20   LARGEST_INT64  
6200: 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69  (0xffffffff|(((i
6210: 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
6220: 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41  32)).#define SMA
6230: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69  LLEST_INT64 (((i
6240: 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54  64)-1) - LARGEST
6250: 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52  _INT64)../*.** R
6260: 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72  ound up a number
6270: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72   to the next lar
6280: 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ger multiple of 
6290: 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  8.  This is used
62a0: 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62  .** to force 8-b
62b0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e  yte alignment on
62c0: 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63   64-bit architec
62d0: 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tures..*/.#defin
62e0: 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20  e ROUND8(x)     
62f0: 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a  (((x)+7)&~7)../*
6300: 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74  .** Round down t
6310: 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75  o the nearest mu
6320: 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23  ltiple of 8.*/.#
6330: 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e  define ROUNDDOWN
6340: 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f  8(x) ((x)&~7)../
6350: 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74  *.** Assert that
6360: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69   the pointer X i
6370: 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20  s aligned to an 
6380: 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e  8-byte boundary.
6390: 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20    This.** macro 
63a0: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74  is used only wit
63b0: 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20  hin assert() to 
63c0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
63d0: 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c  code gets.** all
63e0: 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72   alignment restr
63f0: 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e  ictions correct.
6400: 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69  .**.** Except, i
6410: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
6420: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69  ALIGNED_MALLOC i
6430: 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20  s defined, then 
6440: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
6450: 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65  g malloc() imple
6460: 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20  mentation might 
6470: 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65  return us 4-byte
6480: 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e   aligned.** poin
6490: 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63  ters.  In that c
64a0: 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79  ase, only verify
64b0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   4-byte alignmen
64c0: 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  t..*/.#ifdef SQL
64d0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
64e0: 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69  ED_MALLOC.# defi
64f0: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
6500: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
6510: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
6520: 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65  ar*)0)&3)==0).#e
6530: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47  lse.# define EIG
6540: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
6550: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
6560: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
6570: 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a  &7)==0).#endif..
6580: 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d  /*.** Disable MM
6590: 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20  AP on platforms 
65a0: 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77  where it is know
65b0: 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f  n to not work.*/
65c0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
65d0: 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66  penBSD__) || def
65e0: 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29  ined(__QNXNTO__)
65f0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6600: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6620: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65  X_MMAP_SIZE 0.#e
6630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61  ndif../*.** Defa
6640: 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65  ult maximum size
6650: 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20   of memory used 
6660: 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64  by memory-mapped
6670: 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a   I/O in the VFS.
6680: 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c  */.#ifdef __APPL
6690: 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54  E__.# include <T
66a0: 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c  argetConditional
66b0: 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  s.h>.#endif.#ifn
66c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
66d0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
66e0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
66f0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
6700: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
6710: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
6720: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
6730: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
6740: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c  defined(__sun) \
6750: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
6760: 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c  FreeBSD__) \.  |
6770: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67  | defined(__Drag
6780: 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66  onFly__).#   def
6790: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
67a0: 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30  MAP_SIZE 0x7fff0
67b0: 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31  000  /* 21474181
67c0: 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20  12 */.# else.#  
67d0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
67e0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
67f0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
6800: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6810: 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63  SIZE_xc 1 /* exc
6820: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
6830: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
6840: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
6850: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
6860: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
6870: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
6880: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
6890: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
68a0: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
68b0: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
68c0: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
68d0: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
68e0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
68f0: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
6900: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
6910: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
6920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
6930: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
6940: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6950: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6960: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
6970: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
6980: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  */.#endif.#if SQ
6990: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
69a0: 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41  P_SIZE>SQLITE_MA
69b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e  X_MMAP_SIZE.# un
69c0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
69d0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
69e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
69f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53  AULT_MMAP_SIZE S
6a00: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6a10: 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  IZE.#endif../*.*
6a20: 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51  * Only one of SQ
6a30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6a40: 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42  3 or SQLITE_ENAB
6a50: 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20  LE_STAT4 can be 
6a60: 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f  defined..** Prio
6a70: 72 69 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f  rity is given to
6a80: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6a90: 54 41 54 34 2e 20 20 49 66 20 65 69 74 68 65 72  TAT4.  If either
6aa0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c   are defined, al
6ab0: 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c  so.** define SQL
6ac0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6ad0: 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66  _OR_STAT4.*/.#if
6ae0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
6af0: 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  E_STAT4.# undef 
6b00: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6b10: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
6b20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6b30: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
6b40: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6b50: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
6b60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6b70: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
6b80: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
6b90: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6ba0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6bb0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6bc0: 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  STAT4.#endif../*
6bd0: 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f  .** SELECTTRACE_
6be0: 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20  ENABLED will be 
6bf0: 65 69 74 68 65 72 20 31 20 6f 72 20 30 20 64 65  either 1 or 0 de
6c00: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
6c10: 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65  er or not.** the
6c20: 20 53 65 6c 65 63 74 20 71 75 65 72 79 20 67 65   Select query ge
6c30: 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20  nerator tracing 
6c40: 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64 20  logic is turned 
6c50: 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  on..*/.#if defin
6c60: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
6c70: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
6c80: 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54  TE_ENABLE_SELECT
6c90: 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65 20  TRACE).# define 
6ca0: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
6cb0: 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  LED 1.#else.# de
6cc0: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6cd0: 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64 69  _ENABLED 0.#endi
6ce0: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
6cf0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
6d00: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
6d10: 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
6d20: 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65   the busy-handle
6d30: 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  r.** callback fo
6d40: 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65  r a given sqlite
6d50: 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54   handle..**.** T
6d60: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
6d70: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
6d80: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
6d90: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
6da0: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
6db0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
6dc0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
6dd0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
6de0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
6df0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
6e00: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
6e10: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
6e20: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
6e30: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
6e40: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
6e50: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
6e60: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
6e70: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
6e80: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
6e90: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
6ea0: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
6eb0: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
6ec0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
6ed0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
6ee0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6f00: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
6f10: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
6f20: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
6f30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
6f40: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
6f50: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
6f60: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
6f70: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6f80: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
6f90: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6fa0: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
6fb0: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
6fc0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
6fd0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
6fe0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
6ff0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7000: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7010: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7020: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7030: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7040: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7050: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7060: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7070: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7080: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7090: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
70a0: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
70b0: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
70c0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
70d0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
70e0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
70f0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7100: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7110: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
7120: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
7130: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
7140: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
7150: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
7160: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
7170: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
7180: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
7190: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
71a0: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
71b0: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
71c0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
71d0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
71e0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
71f0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
7200: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
7210: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
7220: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
7230: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
7240: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
7250: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
7260: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
7270: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
7280: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
7290: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
72a0: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
72b0: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
72c0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
72d0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
72e0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
72f0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
7300: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
7310: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
7320: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
7330: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
7340: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
7350: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
7360: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
7370: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
7380: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
7390: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
73a0: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
73b0: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
73c0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
73d0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
73e0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
73f0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
7400: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
7410: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
7420: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
7430: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
7440: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
7450: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
7460: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
7470: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
7480: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
7490: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
74a0: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
74b0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
74c0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
74d0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
74e0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
74f0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
7500: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
7510: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
7520: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
7530: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
7540: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
7550: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
7560: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
7570: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
7580: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
7590: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
75a0: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
75b0: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
75c0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
75d0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
75e0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
75f0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
7600: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
7610: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
7620: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
7630: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
7640: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
7650: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
7660: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
7670: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
7680: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
7690: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
76a0: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
76b0: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
76c0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
76d0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
76e0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
76f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
7700: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
7710: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
7720: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
7730: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
7740: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
7750: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
7760: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
7770: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
7780: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
7790: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
77a0: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
77b0: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
77c0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
77d0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
77e0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
77f0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
7800: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
7810: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
7820: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
7830: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
7840: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
7850: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
7860: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
7870: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
7880: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
7890: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
78a0: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
78b0: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
78c0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
78d0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
78e0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
78f0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
7900: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
7910: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
7920: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
7930: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
7940: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
7950: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
7960: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
7970: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
7980: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
7990: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
79a0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
79b0: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
79c0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
79d0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
79e0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
79f0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
7a00: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
7a10: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
7a20: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
7a30: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
7a40: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
7a50: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7a60: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
7a70: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
7a80: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
7a90: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
7aa0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
7ab0: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
7ac0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
7ad0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
7ae0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
7af0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
7b00: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
7b10: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
7b20: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
7b30: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
7b40: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
7b50: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
7b60: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
7b70: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
7b80: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
7b90: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
7ba0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
7bb0: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
7bc0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
7bd0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
7be0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
7bf0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
7c00: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
7c10: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
7c20: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
7c30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7c40: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
7c50: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
7c60: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
7c70: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
7c80: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
7c90: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
7ca0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
7cb0: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
7cc0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
7cd0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
7ce0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7cf0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
7d00: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
7d10: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
7d20: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
7d30: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
7d40: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
7d50: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
7d60: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
7d70: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
7d80: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
7d90: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
7da0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
7db0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
7dc0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
7dd0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7de0: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
7df0: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
7e00: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
7e10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7e20: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
7e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
7e40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7e50: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
7e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7e70: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
7e80: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
7e90: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
7ea0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7eb0: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
7ec0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7ed0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
7ee0: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
7ef0: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
7f00: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
7f10: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
7f20: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
7f30: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
7f40: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
7f50: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
7f60: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
7f70: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
7f80: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
7f90: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
7fa0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
7fb0: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
7fc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7fd0: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
7fe0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
7ff0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
8000: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
8010: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8020: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8030: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8040: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
8050: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
8060: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
8070: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
8080: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
8090: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
80a0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
80b0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
80c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
80d0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
80e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
80f0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
8100: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8110: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
8120: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
8130: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
8140: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8150: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
8160: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
8170: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
8180: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8190: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
81a0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
81b0: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
81c0: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
81d0: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
81e0: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
81f0: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
8200: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
8210: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
8220: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
8230: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
8240: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
8250: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
8260: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
8270: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
8280: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
8290: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
82a0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
82b0: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
82c0: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
82d0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
82e0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
82f0: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
8300: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
8310: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
8320: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
8330: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
8340: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
8350: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
8360: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
8370: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
8380: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
8390: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
83a0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
83b0: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
83c0: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
83d0: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
83e0: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
83f0: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
8400: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
8410: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
8420: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
8430: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
8440: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
8450: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
8460: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8470: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8480: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
8490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
84a0: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
84b0: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
84c0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
84d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
84e0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
84f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
8500: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
8510: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
8520: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
8530: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
8540: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
8550: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
8560: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
8570: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
8580: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8590: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
85a0: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
85b0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
85c0: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
85d0: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
85e0: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
8610: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
8640: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8660: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
8670: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
8680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8690: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
86a0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
86b0: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
86c0: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
86d0: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
86e0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
86f0: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
8700: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
8710: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
8720: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
8730: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
8740: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
8750: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
8760: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
8770: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8780: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
8790: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
87a0: 43 48 52 4f 4e 4f 55 53 20 28 50 41 47 45 52 5f  CHRONOUS (PAGER_
87b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 46 55 4c 4c  SYNCHRONOUS_FULL
87c0: 2d 31 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  -1).#endif.#ifnd
87d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
87e0: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
87f0: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
8800: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
8810: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
8820: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8830: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
8840: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8850: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
8860: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
8870: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
8880: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
8890: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
88a0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
88b0: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
88c0: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
88d0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
88e0: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
88f0: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
8900: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
8910: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
8920: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
8930: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
8940: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
8950: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
8960: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
8970: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
8980: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
8990: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
89a0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
89b0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74 72  atabase */.  Btr
89c0: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
89d0: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
89e0: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
89f0: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
8a00: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
8a10: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
8a20: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
8a30: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
8a40: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
8a50: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
8a60: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
8a70: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
8a80: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
8a90: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
8aa0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
8ab0: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
8ac0: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
8ad0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
8ae0: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
8af0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8b00: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
8b10: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
8b20: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
8b30: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
8b40: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
8b50: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
8b60: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
8b70: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
8b80: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
8b90: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
8ba0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
8bb0: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
8bc0: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
8bd0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
8be0: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
8bf0: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
8c00: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
8c10: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
8c20: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
8c30: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
8c40: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
8c50: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
8c60: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
8c70: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
8c80: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
8c90: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
8ca0: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
8cb0: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
8cc0: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
8cd0: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
8ce0: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
8cf0: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
8d00: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
8d10: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
8d20: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
8d30: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
8d40: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
8d50: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
8d60: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
8d70: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
8d80: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
8d90: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
8da0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
8db0: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
8dc0: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
8dd0: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
8de0: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
8df0: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
8e00: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
8e10: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
8e20: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
8e30: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
8e40: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
8e50: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
8e60: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
8e70: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
8e80: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
8e90: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
8ea0: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
8eb0: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
8ec0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
8ed0: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
8ee0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
8ef0: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
8f00: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
8f10: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
8f20: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
8f30: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
8f40: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
8f50: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8f60: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
8f70: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
8f80: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
8f90: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
8fa0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
8fb0: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
8fc0: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
8fd0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
8fe0: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
8ff0: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
9000: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
9010: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
9020: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
9030: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
9040: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9050: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
9060: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
9070: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
9080: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
9090: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
90a0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
90b0: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
90c0: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
90d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
90e0: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
90f0: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
9100: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
9110: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
9120: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
9130: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
9140: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
9150: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
9160: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
9170: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9180: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
9190: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
91a0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
91b0: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
91c0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
91d0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
91e0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
91f0: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
9200: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
9210: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
9220: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9230: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
9240: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
9250: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9260: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
9270: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
9280: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
9290: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
92a0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
92b0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
92c0: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
92d0: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
92e0: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
92f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9300: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
9310: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
9320: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
9330: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
9340: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
9350: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
9360: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
9370: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
9380: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
9390: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
93a0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
93b0: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
93c0: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
93d0: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
93e0: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
93f0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
9400: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
9410: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
9420: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
9430: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
9440: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
9450: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
9460: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
9470: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
9480: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
9490: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
94a0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
94b0: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
94c0: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
94d0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
94e0: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
94f0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
9500: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
9510: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
9520: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
9530: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
9540: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9550: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
9560: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
9570: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
9580: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
9590: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
95a0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
95b0: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
95c0: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
95d0: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
95e0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
95f0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
9600: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
9610: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
9620: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
9630: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
9640: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
9650: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
9660: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
9670: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
9680: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
9690: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
96a0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
96b0: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
96c0: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
96d0: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
96e0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
96f0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
9700: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
9710: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
9720: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
9730: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
9740: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
9750: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
9760: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
9770: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
9780: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
9790: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
97a0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
97b0: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
97c0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
97d0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
97e0: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
97f0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
9800: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
9810: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
9820: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
9830: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
9840: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
9850: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
9860: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
9870: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
9880: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9890: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
98a0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
98b0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
98c0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
98d0: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
98e0: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
98f0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
9900: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
9910: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
9920: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
9930: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
9940: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
9950: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
9960: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
9970: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
9980: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
9990: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
99a0: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
99b0: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
99c0: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
99d0: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
99e0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
99f0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
9a00: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
9a10: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
9a20: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
9a30: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
9a40: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
9a50: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
9a60: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
9a70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9a80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
9a90: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
9aa0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
9ab0: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
9ac0: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
9ad0: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
9ae0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
9af0: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
9b00: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
9b10: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
9b20: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
9b30: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9b40: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
9b50: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
9b60: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
9b70: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
9b80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
9b90: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
9ba0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
9bb0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
9bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9bd0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
9be0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
9bf0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
9c00: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
9c10: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9c20: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
9c30: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
9c40: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
9c50: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
9c60: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
9c70: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
9c80: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
9c90: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
9ca0: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
9cb0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
9cc0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
9cd0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
9ce0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
9cf0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
9d00: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
9d10: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
9d20: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
9d30: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
9d40: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
9d50: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
9d60: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
9d70: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
9d80: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
9d90: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
9da0: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
9db0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
9dc0: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
9dd0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
9de0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9df0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
9e00: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
9e10: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
9e20: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
9e30: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
9e40: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
9e50: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
9e60: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
9e70: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
9e80: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
9e90: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
9ea0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
9eb0: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
9ec0: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
9ed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
9ee0: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
9ef0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
9f00: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
9f20: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
9f30: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
9f40: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f60: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
9f70: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
9f80: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
9f90: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
9fa0: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
9fb0: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
9fc0: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
9fd0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
9fe0: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
9ff0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
a000: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
a010: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
a020: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
a030: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
a040: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
a050: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
a060: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
a070: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
a080: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
a090: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
a0a0: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
a0b0: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
a0c0: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
a0d0: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
a0e0: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
a0f0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
a100: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
a110: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
a120: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
a130: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
a140: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
a150: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
a160: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
a170: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
a180: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
a190: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
a1a0: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
a1b0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
a1c0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
a1d0: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
a1e0: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
a1f0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
a200: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
a210: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
a220: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
a230: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
a240: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
a250: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
a260: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
a270: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
a280: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
a290: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
a2a0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
a2b0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
a2c0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
a2d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
a300: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
a310: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
a320: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
a330: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
a340: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
a350: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
a360: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a380: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
a390: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
a3a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
a3b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a3c0: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
a3d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
a3e0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
a3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
a400: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
a410: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
a420: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
a430: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
a440: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
a450: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
a460: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
a470: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
a480: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
a490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
a4a0: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
a4b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
a4c0: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
a4d0: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
a4e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
a4f0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
a500: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a520: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
a530: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
a540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a550: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
a560: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
a570: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
a580: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
a590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
a5a0: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
a5b0: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
a5c0: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
a5d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a5e0: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
a5f0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
a600: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
a610: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a630: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
a640: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
a650: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
a660: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
a670: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
a680: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
a690: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
a6a0: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
a6b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
a6c0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
a6d0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
a6e0: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a700: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
a710: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
a720: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
a730: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
a740: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
a750: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
a760: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
a770: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
a780: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a7a0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
a7b0: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
a7c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a7d0: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
a7e0: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
a7f0: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a810: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
a820: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
a830: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
a840: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
a850: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
a860: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
a870: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
a880: 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20   bBenignMalloc; 
a890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a8a0: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f  o not require OO
a8b0: 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  Ms if true */.  
a8c0: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a8e0: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
a8f0: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
a900: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
a910: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
a920: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
a930: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
a940: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
a950: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
a960: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
a970: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
a980: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
a990: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
a9a0: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
a9b0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
a9c0: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
a9d0: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
a9e0: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
a9f0: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
aa00: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
aa10: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
aa20: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
aa30: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e   is a TS */.  in
aa40: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
aa60: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
aa70: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
aa80: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aaa0: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
aab0: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
aac0: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
aad0: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
aae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
aaf0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
ab00: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
ab10: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
ab20: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
ab30: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
ab40: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
ab50: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
ab60: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
ab70: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
ab80: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
ab90: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
aba0: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
abb0: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
abc0: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
abd0: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
abe0: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
abf0: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
ac00: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
ac10: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
ac20: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
ac30: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ac50: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
ac60: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
ac70: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
ac80: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
ac90: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
aca0: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
acb0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
acc0: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
acf0: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
ad00: 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70  ng */.    u8 orp
ad10: 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20  hanTrigger;     
ad20: 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74        /* Last st
ad30: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
ad40: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
ad50: 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73   */.    u8 impos
ad60: 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20  terTable;       
ad70: 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20      /* Building 
ad80: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
ad90: 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20  e */.  } init;. 
ada0: 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65   int nVdbeActive
adb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
adc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45  * Number of VDBE
add0: 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  s currently runn
ade0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ing */.  int nVd
adf0: 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20  beRead;         
ae00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae10: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
ae20: 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72   that read or wr
ae30: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
ae40: 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20  beWrite;        
ae50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae60: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
ae70: 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77   that read and w
ae80: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
ae90: 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20  dbeExec;        
aea0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
aeb0: 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
aec0: 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20  s to VdbeExec() 
aed0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72  */.  int nVDestr
aee0: 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oy;             
aef0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
af00: 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72  active OP_VDestr
af10: 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f  oy operations */
af20: 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f  .  int nExtensio
af30: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
af40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
af50: 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20  aded extensions 
af60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74  */.  void **aExt
af70: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
af80: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73     /* Array of s
af90: 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61  hared library ha
afa0: 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ndles */.  void 
afb0: 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c  (*xTrace)(void*,
afc0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20  const char*);   
afd0: 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75       /* Trace fu
afe0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
aff0: 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20   *pTraceArg;    
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
b020: 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66  t to the trace f
b030: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
b040: 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f  d (*xProfile)(vo
b050: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  id*,const char*,
b060: 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c  u64);  /* Profil
b070: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ing function */.
b080: 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65    void *pProfile
b090: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b0b0: 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69  rgument to profi
b0c0: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  le function */. 
b0d0: 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72   void *pCommitAr
b0e0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b0f0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
b100: 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  o xCommitCallbac
b110: 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  k() */.  int (*x
b120: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
b130: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
b140: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
b150: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
b160: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b180: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
b190: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
b1a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f   */.  void (*xRo
b1b0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
b1c0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
b1d0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
b1e0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
b1f0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
b200: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
b210: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
b220: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b230: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
b240: 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53  nt64);.#ifndef S
b250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
b260: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
b270: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
b280: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
b290: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
b2a0: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
b2b0: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
b2c0: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
b2d0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
b2e0: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
b2f0: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
b300: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
b310: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
b320: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
b330: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
b340: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
b350: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
b360: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
b370: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
b380: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e   message */.  un
b390: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
b3a0: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
b3b0: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
b3c0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
b3d0: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
b3e0: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
b3f0: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
b400: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
b410: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
b420: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
b430: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
b440: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
b450: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
b460: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b470: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
b480: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74  N.  sqlite3_xaut
b490: 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20  h xAuth;        
b4a0: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
b4b0: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
b4c0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
b4d0: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
b4e0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
b4f0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
b500: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
b510: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
b520: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b530: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
b540: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
b550: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
b560: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
b570: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
b580: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
b590: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
b5a0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
b5b0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
b5c0: 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ck */.  unsigned
b5d0: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20   nProgressOps;  
b5e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
b5f0: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
b600: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
b610: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
b620: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
b630: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
b640: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
b650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b660: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
b670: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
b680: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
b690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
b6a0: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
b6b0: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
b6c0: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
b6d0: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
b6e0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
b6f0: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
b700: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
b710: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
b720: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
b730: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
b740: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
b750: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
b760: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
b770: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
b780: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
b790: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
b7a0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
b7b0: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
b7e0: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
b7f0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
b800: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
b810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
b820: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
b830: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
b840: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
b850: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
b860: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
b870: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b890: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
b8a0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
b8b0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
b8c0: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
b8d0: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
b8e0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
b8f0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
b900: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
b910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
b920: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
b930: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
b940: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b960: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
b970: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
b980: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
b990: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
b9a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b9b0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
b9c0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
b9d0: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
b9e0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
b9f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
ba00: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
ba10: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
ba20: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
ba30: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
ba40: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
ba50: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
ba60: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
ba70: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
ba80: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
ba90: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
baa0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
bab0: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
bac0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
bad0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
bae0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
baf0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
bb00: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
bb10: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
bb20: 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74  _MASTER.  ** mut
bb30: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
bb40: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
bb50: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
bb60: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a  in notify.c..  *
bb70: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
bb80: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
bb90: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
bba0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
bbb0: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
bbc0: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
bbd0: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
bbe0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
bbf0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
bc00: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
bc10: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
bc20: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
bc30: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
bc40: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
bc50: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
bc60: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
bc70: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
bc80: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
bc90: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
bca0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
bcb0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
bcc0: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
bcd0: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
bce0: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
bcf0: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
bd00: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
bd10: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
bd20: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
bd30: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd50: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
bd60: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
bd70: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
bd80: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
bd90: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
bda0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
bdb0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
bdc0: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
bdd0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
bde0: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
bdf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
be00: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
be10: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
be20: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
be30: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
be40: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
be50: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
be60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
be70: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
be80: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
be90: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
bea0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
beb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
bec0: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
bed0: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
bee0: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
bef0: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
bf00: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
bf10: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
bf20: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
bf30: 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  flags..*/.#defin
bf40: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
bf50: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
bf60: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
bf70: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
bf80: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
bf90: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
bfa0: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
bfb0: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
bfc0: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
bfd0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bfe0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
bff0: 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20  s   0x00000004  
c000: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
c010: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
c020: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
c030: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
c040: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
c050: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
c060: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
c070: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c080: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
c090: 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f  c  0x00000010  /
c0a0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
c0b0: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
c0c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c0d0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
c0e0: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
c0f0: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
c100: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
c110: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
c120: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
c130: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
c140: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
c150: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c160: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
c170: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
c180: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
c190: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
c1a0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
c1d0: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
c1e0: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
c1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c210: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
c220: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
c230: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
c240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
c250: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
c260: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
c270: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
c280: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
c2c0: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
c2d0: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
c2e0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
c2f0: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
c300: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
c310: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
c320: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c330: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
c340: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
c350: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
c360: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
c370: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c380: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
c390: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
c3a0: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
c3b0: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
c3c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
c3d0: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
c3e0: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
c3f0: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
c400: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
c410: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
c420: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
c430: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
c440: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
c450: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
c460: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
c470: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
c480: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
c490: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
c4a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
c4b0: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
c4c0: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
c4d0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
c4e0: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
c4f0: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
c500: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
c510: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
c520: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
c530: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
c540: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
c550: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
c560: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
c570: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
c580: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c590: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
c5a0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
c5b0: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
c5c0: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
c5d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
c5e0: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
c5f0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
c600: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
c610: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
c620: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c630: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
c640: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
c650: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
c660: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
c670: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
c680: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
c690: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
c6a0: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
c6b0: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
c6c0: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
c6d0: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
c6e0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
c6f0: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
c700: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
c710: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30  eTrigger  0x0080
c720: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
c730: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
c740: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c750: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
c760: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
c770: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
c780: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
c790: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
c7a0: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30  yOnly      0x020
c7b0: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
c7c0: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
c7d0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
c7e0: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
c7f0: 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20      0x04000000  
c800: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
c810: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
c820: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 61  define SQLITE_Va
c830: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
c840: 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72 72  8000000  /* Curr
c850: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
c860: 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  M */.#define SQL
c870: 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20  ITE_CellSizeCk  
c880: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
c890: 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65  * Check btree ce
c8a0: 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64  ll sizes on load
c8b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c8c0: 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72  TE_Fts3Tokenizer
c8d0: 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a    0x20000000  /*
c8e0: 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b   Enable fts3_tok
c8f0: 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 0a 0a 2f  enizer(2) */.../
c900: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
c910: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
c920: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
c930: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
c940: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
c950: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
c960: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
c970: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
c980: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
c990: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
c9a0: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
c9b0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
c9c0: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
c9d0: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
c9e0: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
c9f0: 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ng */.#define SQ
ca00: 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65  LITE_ColumnCache
ca10: 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20      0x0002   /* 
ca20: 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a  Column cache */.
ca30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47  #define SQLITE_G
ca40: 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78  roupByOrder   0x
ca50: 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42  0004   /* GROUPB
ca60: 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52  Y cover of ORDER
ca70: 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BY */.#define SQ
ca80: 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f  LITE_FactorOutCo
ca90: 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20  nst 0x0008   /* 
caa0: 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69  Constant factori
cab0: 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20  ng */./*        
cac0: 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64          not used
cad0: 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20      0x0010   // 
cae0: 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52  Was: SQLITE_IdxR
caf0: 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66  ealAsInt */.#def
cb00: 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69  ine SQLITE_Disti
cb10: 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30  nctOpt    0x0020
cb20: 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75     /* DISTINCT u
cb30: 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a  sing indexes */.
cb40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
cb50: 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78  overIdxScan   0x
cb60: 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69  0040   /* Coveri
cb70: 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a  ng index scans *
cb80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cb90: 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20  _OrderByIdxJoin 
cba0: 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45  0x0080   /* ORDE
cbb0: 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69  R BY of joins vi
cbc0: 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  a index */.#defi
cbd0: 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f  ne SQLITE_SubqCo
cbe0: 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20  routine  0x0100 
cbf0: 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75    /* Evaluate su
cc00: 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f  bqueries as coro
cc10: 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e  utines */.#defin
cc20: 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74  e SQLITE_Transit
cc30: 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20  ive     0x0200  
cc40: 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63   /* Transitive c
cc50: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
cc60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69  efine SQLITE_Omi
cc70: 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34  tNoopJoin   0x04
cc80: 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75  00   /* Omit unu
cc90: 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f  sed tables in jo
cca0: 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ins */.#define S
ccb0: 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20  QLITE_Stat34    
ccc0: 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a       0x0800   /*
ccd0: 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54   Use STAT3 or ST
cce0: 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66  AT4 data */.#def
ccf0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f  ine SQLITE_Curso
cd00: 72 48 69 6e 74 73 20 20 20 20 30 78 32 30 30 30  rHints    0x2000
cd10: 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72     /* Add OP_Cur
cd20: 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20  sorHint opcodes 
cd30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cd40: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
cd50: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
cd60: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
cd70: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
cd80: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
cd90: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
cda0: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
cdb0: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
cdc0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
cdd0: 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
cde0: 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70  _TEST.#define Op
cdf0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
ce00: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
ce10: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
ce20: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
ce30: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
ce40: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
ce50: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
ce60: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
ce70: 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  =0).#else.#defin
ce80: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
ce90: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
cea0: 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69    0.#define Opti
ceb0: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
cec0: 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65  db, mask)   1.#e
ced0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
cee0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
cef0: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
cf00: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
cf10: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
cf20: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
cf30: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
cf40: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
cf50: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
cf60: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
cf70: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
cf80: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
cf90: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
cfa0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
cfb0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
cfc0: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
cfd0: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
cfe0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
cff0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
d000: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
d010: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
d020: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
d030: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
d040: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d050: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
d060: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
d070: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
d080: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d090: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
d0a0: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
d0b0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
d0c0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
d0d0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
d0e0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
d0f0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
d100: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
d110: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
d120: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
d130: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
d140: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
d150: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
d160: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
d170: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
d180: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
d190: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
d1a0: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
d1b0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
d1c0: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
d1d0: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
d1e0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
d1f0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
d200: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
d210: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
d220: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
d230: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
d240: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67  tructure.  For g
d250: 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66  lobal built-in f
d260: 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75  unctions (ex: su
d270: 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63  bstr(), max(), c
d280: 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69  ount()).** a poi
d290: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
d2a0: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
d2b0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69  n the sqlite3Bui
d2c0: 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62  ltinFunctions ob
d2d0: 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72  ject..** For per
d2e0: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c  -connection appl
d2f0: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
d300: 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69  functions, a poi
d310: 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20  nter to this.** 
d320: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
d330: 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61  d in the db->aHa
d340: 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  sh hash table..*
d350: 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68  *.** The u.pHash
d360: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
d370: 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69  y the global bui
d380: 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70  lt-ins.  The u.p
d390: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69  Destructor.** fi
d3a0: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70  eld is used by p
d3b0: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
d3c0: 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e  p-def functions.
d3d0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
d3e0: 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20  ef {.  i8 nArg; 
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d400: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
d410: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
d420: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
d430: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
d440: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
d450: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
d460: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
d470: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
d480: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
d490: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
d4a0: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
d4b0: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
d4c0: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
d4d0: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  e */.  void (*xS
d4e0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
d4f0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
d500: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
d510: 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70  func or agg-step
d520: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
d530: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
d540: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
d550: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d560: 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  gg finalizer */.
d570: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
d580: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
d590: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
d5a0: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
d5b0: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
d5c0: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
d5d0: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
d5e0: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
d5f0: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
d600: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
d610: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
d620: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
d630: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
d640: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
d650: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
d660: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
d670: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
d680: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
d690: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
d6a0: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
d6b0: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
d6c0: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
d6d0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
d6e0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
d6f0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
d700: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
d710: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
d720: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
d730: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
d740: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
d750: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
d760: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
d770: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
d780: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
d790: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
d7a0: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
d7b0: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
d7c0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
d7d0: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
d7e0: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
d7f0: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
d800: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
d810: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
d820: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
d830: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
d840: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
d850: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
d860: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
d870: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
d880: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
d890: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
d8a0: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
d8b0: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
d8c0: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
d8d0: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
d8e0: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
d8f0: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
d900: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
d910: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
d920: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
d930: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
d940: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
d950: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
d960: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
d970: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
d980: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
d990: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
d9a0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d9b0: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
d9c0: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
d9d0: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
d9e0: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
d9f0: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
da00: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
da10: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
da20: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
da30: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
da40: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
da50: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
da60: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
da70: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
da80: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
da90: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
daa0: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
dab0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
dac0: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
dad0: 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49    0x0003 /* SQLI
dae0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
daf0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
db00: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
db10: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
db20: 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e     0x0004 /* Can
db30: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
db40: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
db50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
db60: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
db70: 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d   0x0008 /* Case-
db80: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
db90: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
dba0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dbb0: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
dbc0: 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  010 /* Ephemeral
dbd0: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
dbe0: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
dbf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
dc00: 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71  OLL 0x0020 /* sq
dc10: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
dc20: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
dc30: 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20  alled*/.#define 
dc40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
dc50: 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42  TH   0x0040 /* B
dc60: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
dc70: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
dc80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
dc90: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30  _TYPEOF   0x0080
dca0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
dcb0: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
dcc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dcd0: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
dce0: 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0100 /* Built-i
dcf0: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
dd00: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
dd10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
dd20: 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42  ESCE 0x0200 /* B
dd30: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
dd40: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
dd50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd60: 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
dd70: 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0400 /* Built-i
dd80: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
dd90: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
dda0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
ddb0: 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20  STANT 0x0800 /* 
ddc0: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
ddd0: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
dde0: 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
ddf0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
de00: 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a  NMAX   0x1000 /*
de10: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
de20: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
de30: 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
de40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
de50: 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22  HNG  0x2000 /* "
de60: 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61  Slow Change". Va
de70: 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72  lue constant dur
de80: 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20  ing a.          
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e            ** sin
deb0: 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68  gle query - migh
dec0: 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69  t change over ti
ded0: 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  me */../*.** The
dee0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
def0: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
df00: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
df10: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
df20: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
df30: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
df40: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
df50: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
df60: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
df70: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
df80: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
df90: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
dfa0: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
dfb0: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
dfc0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
dfd0: 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
dfe0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
dff0: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
e000: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
e010: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
e020: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
e030: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
e040: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
e050: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
e060: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
e070: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
e080: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
e090: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
e0a0: 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
e0b0: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
e0c0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
e0d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
e0e0: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
e0f0: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
e100: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
e110: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
e120: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
e130: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
e140: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
e150: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
e160: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
e170: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
e180: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
e190: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
e1a0: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
e1b0: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
e1c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
e1d0: 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
e1e0: 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
e1f0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
e200: 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
e210: 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
e220: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
e230: 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
e240: 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
e250: 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
e260: 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
e270: 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
e280: 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  le query..**.** 
e290: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
e2a0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
e2b0: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
e2c0: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
e2d0: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
e2e0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
e2f0: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
e300: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
e310: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
e320: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
e330: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
e340: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
e350: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
e360: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
e370: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
e380: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
e390: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
e3a0: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
e3b0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
e3c0: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
e3d0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
e3e0: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
e3f0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
e400: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
e410: 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74  Name.**     that
e420: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
e430: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
e440: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
e450: 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20  call to C.**    
e460: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
e470: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
e480: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
e490: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
e4a0: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
e4b0: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
e4c0: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
e4d0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
e4e0: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
e4f0: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
e500: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
e510: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
e520: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
e530: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
e540: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
e550: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
e560: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
e570: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
e580: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
e590: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
e5a0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
e5b0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
e5c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
e5d0: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
e5e0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
e5f0: 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
e600: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
e610: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
e620: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
e630: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
e640: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
e650: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
e660: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
e670: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
e680: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
e690: 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f  #define DFUNCTIO
e6a0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
e6b0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
e6c0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
e6d0: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
e6e0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
e6f0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e700: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
e710: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
e720: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
e730: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
e740: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
e750: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
e760: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
e770: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
e780: 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
e790: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
e7a0: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
e7b0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
e7c0: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
e7d0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
e7e0: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
e7f0: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
e800: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
e810: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
e820: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
e830: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
e840: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
e850: 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
e860: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
e870: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
e880: 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
e890: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
e8a0: 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  e, }.#define LIK
e8b0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
e8c0: 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
e8d0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
e8e0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
e8f0: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
e900: 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
e910: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
e920: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
e930: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
e940: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
e950: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
e960: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
e970: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
e980: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
e990: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
e9a0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e9b0: 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
e9c0: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
e9d0: 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  {0}}.#define AGG
e9e0: 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e  REGATE2(zName, n
e9f0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
ea00: 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74  tep, xFinal, ext
ea10: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
ea20: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
ea30: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
ea40: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
ea50: 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
ea60: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
ea70: 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
ea80: 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  al,#zName, {0}}.
ea90: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
eaa0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
eab0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
eac0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
ead0: 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
eae0: 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
eaf0: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
eb00: 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
eb10: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
eb20: 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
eb30: 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
eb40: 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
eb50: 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
eb60: 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
eb70: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
eb80: 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
eb90: 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
eba0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
ebb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
ebc0: 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
ebd0: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
ebe0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
ebf0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
ec00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ec10: 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
ec20: 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
ec30: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
ec40: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
ec50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ec60: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b   deferred imm fk
ec70: 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  . */.  Savepoint
ec80: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
ec90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
eca0: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
ecb0: 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
ecc0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
ecd0: 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
ece0: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
ecf0: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
ed00: 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
ed10: 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
ed20: 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
ed30: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
ed40: 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
ed50: 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
ed60: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
ed70: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
ed80: 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
ed90: 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
eda0: 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
edb0: 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
edc0: 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
edd0: 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
ede0: 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
edf0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
ee00: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
ee10: 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
ee20: 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
ee30: 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
ee40: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
ee50: 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
ee60: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
ee70: 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
ee80: 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
ee90: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
eea0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
eeb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
eec0: 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
eed0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
eee0: 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef00: 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
ef10: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
ef20: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
ef30: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
ef40: 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
ef50: 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
ef60: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
ef70: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70   */.  Table *pEp
ef80: 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  oTab;           
ef90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
efa0: 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f  onymous table fo
efb0: 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f  r this module */
efc0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
efd0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
efe0: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
eff0: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
f000: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
f010: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
f020: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
f030: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
f040: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
f050: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
f060: 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74  mn, \000, then t
f070: 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70  he type */.  Exp
f080: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
f090: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
f0a0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
f0b0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
f0c0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
f0d0: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
f0e0: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
f0f0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
f100: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
f110: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
f120: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
f130: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
f140: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
f150: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
f160: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
f170: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
f180: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
f190: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
f1a0: 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20  f value in this 
f1b0: 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49  column. sizeof(I
f1c0: 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  NT)==1 */.  u8 c
f1d0: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
f1e0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
f1f0: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
f200: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
f210: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
f220: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
f230: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
f240: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
f250: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
f260: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
f270: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
f280: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
f290: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
f2a0: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
f2b0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
f2c0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
f2d0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
f2e0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
f2f0: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
f300: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
f310: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
f320: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
f330: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
f340: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
f350: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
f360: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
f370: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
f380: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
f390: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
f3a0: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
f3b0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
f3c0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
f3d0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
f3e0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f3f0: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
f400: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
f410: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
f420: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
f430: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
f440: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
f450: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
f460: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
f470: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
f480: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
f490: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
f4a0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
f4b0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
f4c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
f4d0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
f4e0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
f4f0: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
f500: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
f510: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
f520: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
f530: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
f540: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
f550: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
f560: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
f570: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
f580: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
f590: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
f5a0: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
f5b0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
f5c0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
f5d0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
f5e0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
f5f0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
f600: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f610: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
f620: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
f630: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
f640: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
f650: 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f  O_UNDEFINED -1 /
f660: 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20  * No sort order 
f670: 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a  specified */../*
f680: 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e  .** Column affin
f690: 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a  ity types..**.**
f6a0: 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68   These used to h
f6b0: 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d  ave mnemonic nam
f6c0: 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53  e like 'i' for S
f6d0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
f6e0: 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72  R and.** 't' for
f6f0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
f700: 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61  .  But we can sa
f710: 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63  ve a little spac
f720: 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a  e and improve.**
f730: 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74   the speed a lit
f740: 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67  tle by numbering
f750: 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73   the values cons
f760: 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a  ecutively..**.**
f770: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
f780: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
f790: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
f7a0: 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79  h 'A'.  That way
f7b0: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
f7c0: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
f7d0: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
f7e0: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
f7f0: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
f800: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
f810: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
f820: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
f830: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
f840: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
f850: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
f860: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
f870: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
f880: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
f890: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
f8a0: 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42  ison.  And the B
f8b0: 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73  LOB type is firs
f8c0: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  t..*/.#define SQ
f8d0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20  LITE_AFF_BLOB   
f8e0: 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51    'A'.#define SQ
f8f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
f900: 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51    'B'.#define SQ
f910: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
f920: 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51    'C'.#define SQ
f930: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
f940: 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51    'D'.#define SQ
f950: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
f960: 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73    'E'..#define s
f970: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
f980: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
f990: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
f9a0: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
f9b0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
f9c0: 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
f9d0: 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
f9e0: 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
f9f0: 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a  affinity value..
fa00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fa10: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
fa20: 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x47../*.** Addit
fa30: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
fa40: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
fa50: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
fa60: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
fa70: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
fa80: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
fa90: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
faa0: 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
fab0: 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
fac0: 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
fad0: 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
fae0: 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
faf0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
fb00: 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
fb10: 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
fb20: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
fb30: 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
fb40: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
fb50: 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
fb60: 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
fb70: 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
fb80: 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
fb90: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
fba0: 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75  LL   0x10  /* ju
fbb0: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
fbc0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
fbd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fbe0: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32  STOREP2      0x2
fbf0: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
fc00: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
fc10: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
fc20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fc30: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
fc40: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
fc50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fc60: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
fc70: 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20  0x90  /* Assert 
fc80: 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
fc90: 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
fca0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
fcb0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
fcc0: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
fcd0: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
fce0: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
fcf0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
fd00: 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
fd10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
fd20: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
fd30: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
fd40: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
fd50: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
fd60: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
fd70: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
fd80: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
fd90: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
fda0: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
fdb0: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
fdc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
fdd0: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
fde0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
fdf0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
fe00: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
fe10: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
fe20: 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20  irtual table.** 
fe30: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
fe40: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
fe50: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
fe60: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a   shared between.
fe70: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
fe80: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
fe90: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
fea0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
feb0: 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20  abase.** schema 
fec0: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
fed0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
fee0: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
fef0: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
ff00: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
ff10: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
ff20: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
ff30: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
ff40: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
ff50: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
ff60: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
ff70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ff80: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
ff90: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
ffa0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ffb0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ffc0: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
ffd0: 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e  tables.** within
ffe0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
fff0: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
10000 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
10010 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61  e callers.** tra
10020 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20  nsaction, these 
10030 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f  accesses need to
10040 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65   be made via the
10050 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a   same database.*
10060 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20  * connection as 
10070 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65  that used to exe
10080 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69  cute SQL operati
10090 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75  ons on the virtu
100a0 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  al table..**.** 
100b0 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  All VTable objec
100c0 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ts that correspo
100d0 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74  nd to a single t
100e0 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64  able in a shared
100f0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68  .** database sch
10100 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c  ema are initiall
10110 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  y stored in a li
10120 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65  nked-list pointe
10130 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54  d to by.** the T
10140 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d  able.pVTable mem
10150 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20  ber variable of 
10160 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
10170 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a  g Table object..
10180 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74  ** When an sqlit
10190 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65  e3_prepare() ope
101a0 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  ration is requir
101b0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
101c0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
101d0 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74  e, it searches t
101e0 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20  he list for the 
101f0 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72  VTable that corr
10200 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a  esponds to the.*
10210 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
10220 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20  ction doing the 
10230 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20  preparing so as 
10240 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65  to use the corre
10250 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74  ct.** sqlite3_vt
10260 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68  ab* handle in th
10270 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
10280 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ..**.** When an 
10290 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20  in-memory Table 
102a0 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65  object is delete
102b0 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77  d (for example w
102c0 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d  hen the.** schem
102d0 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61  a is being reloa
102e0 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61  ded for some rea
102f0 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65  son), the VTable
10300 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74   objects are not
10310 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
10320 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
10330 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
10340 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
10350 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  d.** immediately
10360 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20  . Instead, they 
10370 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74  are moved from t
10380 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
10390 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74   list to.** anot
103a0 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  her linked list 
103b0 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71  headed by the sq
103c0 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
103d0 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  t member of the.
103e0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
103f0 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75   sqlite3 structu
10400 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65  re. They are the
10410 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f  n deleted/xDisco
10420 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20  nnected.** next 
10430 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
10440 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
10450 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
10460 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
10470 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
10480 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
10490 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
104a0 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
104b0 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
104c0 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
104d0 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
104e0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
104f0 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
10500 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
10510 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
10520 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
10530 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
10540 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
10550 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
10560 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
10570 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
10580 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
10590 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
105a0 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
105b0 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
105c0 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
105d0 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e  DbMalloc(), usin
105e0 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
105f0 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69   handle stored i
10600 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a  n VTable.db as.*
10610 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
10620 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
10630 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
10640 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
10650 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
10660 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
10670 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
10680 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
10690 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
106a0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
106b0 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
106c0 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
106d0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
106e0 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
106f0 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
10700 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
10710 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
10720 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10730 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
10740 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
10750 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
10760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
10770 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
10780 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
10790 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
107a0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
107b0 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
107c0 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
107d0 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
107e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
107f0 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
10800 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
10810 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
10820 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63  e schema for eac
10830 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20  h SQL table and 
10840 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65 6e  view is represen
10850 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
10860 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
10870 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
10880 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
10890 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
108a0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
108b0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
108c0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
108d0 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
108e0 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
108f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10900 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
10910 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
10920 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
10930 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
10940 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
10950 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
10960 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
10970 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
10980 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
10990 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
109a0 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
109b0 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
109c0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
109d0 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
109e0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
109f0 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
10a00 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
10a10 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
10a20 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
10a30 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
10a40 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c  Check;    /* All
10a50 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
10a60 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ts */.          
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10a80 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20    ... also used 
10a90 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c  as column name l
10aa0 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f  ist in a VIEW */
10ab0 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
10ac0 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
10ad0 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  BTree page for t
10ae0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  his table */.  i
10af0 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
10b00 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
10b10 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
10b20 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
10b30 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
10b40 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
10b50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10b60 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
10b70 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
10b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10b90 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
10ba0 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
10bb0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
10bc0 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
10bd0 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
10be0 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
10bf0 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
10c00 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
10c10 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
10c20 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
10c30 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
10c40 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
10c50 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
10c60 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
10c70 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
10c80 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
10c90 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
10ca0 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
10cb0 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
10cc0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
10cd0 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
10ce0 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
10cf0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
10d00 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
10d10 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
10d20 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
10d30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10d40 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
10d50 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
10d60 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
10d70 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
10d80 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
10d90 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
10da0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
10db0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
10dc0 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
10dd0 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
10de0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
10df0 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
10e00 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
10e10 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a  oduleArg;  /* 0:
10e20 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d   module 1: schem
10e30 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33  a 2: vtab name 3
10e40 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56  ...: args */.  V
10e50 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
10e60 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
10e70 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
10e80 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
10e90 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
10ea0 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
10eb0 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
10ec0 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
10ed0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10ee0 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
10ef0 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
10f00 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
10f10 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
10f20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
10f30 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
10f40 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
10f50 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10f60 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
10f70 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69  ..**.** TF_OOOHi
10f80 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  dden applies to 
10f90 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74  tables or view t
10fa0 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20  hat have hidden 
10fb0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
10fc0 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  .** followed by 
10fd0 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
10fe0 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22  ns.  Example:  "
10ff0 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
11000 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20  ABLE x USING.** 
11010 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20  vtab1(a HIDDEN, 
11020 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22  b);".  Since "b"
11030 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e   is a non-hidden
11040 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20   column but "a" 
11050 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68  is hidden,.** th
11060 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  e TF_OOOHidden a
11070 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61  ttribute would a
11080 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73  pply in this cas
11090 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20  e.  Such tables 
110a0 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69  require.** speci
110b0 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69  al handling duri
110c0 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73  ng INSERT proces
110d0 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  sing..*/.#define
110e0 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
110f0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
11100 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
11110 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
11120 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
11130 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
11140 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
11150 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
11160 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
11170 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
11180 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
11190 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
111a0 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
111b0 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
111c0 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
111d0 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
111e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
111f0 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
11200 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
11210 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
11220 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
11230 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
11240 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
11250 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
11260 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
11270 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
11280 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a  owid  0x40    /*
11290 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
112a0 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
112b0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
112c0 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
112d0 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
112e0 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
112f0 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  umns */.../*.** 
11300 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
11310 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
11320 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
11330 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
11340 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
11350 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
11360 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
11370 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
11380 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
11390 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
113a0 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
113b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
113c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
113d0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
113e0 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
113f0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
11400 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
11410 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
11420 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
11430 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
11440 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
11450 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
11460 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
11470 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
11480 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
11490 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
114a0 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
114b0 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
114c0 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
114d0 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
114e0 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
114f0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
11500 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
11510 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
11520 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
11530 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
11540 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
11550 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
11560 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
11570 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
11580 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
11590 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
115a0 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
115b0 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
115c0 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
115d0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
115e0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
115f0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
11600 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
11610 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
11620 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
11630 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
11640 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
11650 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
11660 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
11670 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
11680 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
11690 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
116a0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
116b0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
116c0 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
116d0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
116e0 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
116f0 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
11700 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
11710 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
11720 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
11730 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
11740 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
11750 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
11760 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
11770 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
11780 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
11790 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
117a0 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
117b0 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
117c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
117d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
117e0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
117f0 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
11800 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
11810 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
11820 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
11830 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
11840 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
11850 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
11860 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
11870 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
11880 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
11890 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
118a0 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
118b0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
118c0 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
118d0 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
118e0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
118f0 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
11900 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
11910 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
11920 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
11930 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
11940 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
11950 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
11960 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
11970 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
11980 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
11990 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
119a0 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
119b0 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
119c0 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
119d0 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
119e0 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
119f0 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
11a00 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
11a10 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
11a20 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
11a30 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11a40 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11a50 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
11a60 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
11a70 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
11a80 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
11a90 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
11aa0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
11ab0 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
11ac0 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
11ad0 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
11ae0 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
11af0 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
11b00 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
11b10 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
11b20 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
11b30 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
11b40 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
11b50 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
11b60 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
11b70 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
11b80 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
11b90 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
11ba0 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
11bb0 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
11bc0 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
11bd0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
11be0 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
11bf0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
11c00 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
11c10 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
11c20 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
11c30 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
11c40 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
11c50 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
11c60 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
11c70 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
11c80 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
11c90 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
11ca0 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
11cb0 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
11cc0 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
11cd0 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
11ce0 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
11cf0 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
11d00 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
11d10 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
11d20 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
11d30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
11d40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11d50 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
11d60 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
11d70 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
11d80 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
11d90 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
11da0 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
11db0 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
11dc0 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
11dd0 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
11de0 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
11df0 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
11e00 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
11e10 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
11e20 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
11e30 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
11e40 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
11e50 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
11e60 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
11e70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
11e80 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
11e90 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
11ea0 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
11eb0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
11ec0 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
11ed0 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
11ee0 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
11ef0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
11f00 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
11f10 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
11f20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
11f30 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
11f40 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
11f50 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
11f60 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
11f70 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
11f80 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
11f90 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
11fa0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
11fb0 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
11fc0 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
11fd0 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
11fe0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
11ff0 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
12000 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
12010 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
12020 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
12030 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
12040 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
12050 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
12060 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
12070 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
12080 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
12090 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
120a0 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
120b0 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
120c0 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
120d0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
120e0 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
120f0 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
12100 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
12110 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
12120 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
12130 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
12140 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
12150 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
12160 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
12170 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
12180 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
12190 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
121a0 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
121b0 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
121c0 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
121d0 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
121e0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
121f0 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
12200 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
12210 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
12220 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
12230 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
12240 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
12250 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
12260 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
12270 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
12280 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
12290 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
122a0 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
122b0 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
122c0 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
122d0 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
122e0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
122f0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
12300 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
12310 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
12320 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
12330 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
12340 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
12350 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
12360 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
12370 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
12380 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
12390 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
123a0 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
123b0 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
123c0 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
123d0 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
123e0 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
123f0 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
12400 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
12410 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
12420 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
12430 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
12440 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
12450 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
12460 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
12470 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
12480 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
12490 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
124a0 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
124b0 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
124c0 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
124d0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
124e0 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
124f0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
12500 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
12510 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
12520 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
12530 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
12540 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
12550 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
12560 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
12570 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
12580 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
12590 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
125a0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
125b0 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
125c0 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
125d0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
125e0 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
125f0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
12600 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
12610 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
12620 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
12630 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
12640 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
12650 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
12660 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
12670 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
12680 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
12690 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
126a0 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
126b0 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
126c0 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
126d0 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
126e0 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
126f0 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
12700 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
12710 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
12720 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
12730 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
12740 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
12750 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
12760 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
12770 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
12780 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
12790 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
127a0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
127b0 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
127c0 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
127d0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
127e0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
127f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12800 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
12810 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
12820 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
12830 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
12840 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
12850 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
12860 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
12870 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
12880 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
12890 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
128a0 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
128b0 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
128c0 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
128d0 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
128e0 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
128f0 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
12900 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
12910 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
12920 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
12930 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
12940 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
12950 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
12960 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
12970 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
12980 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
12990 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
129a0 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
129b0 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
129c0 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
129d0 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
129e0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
129f0 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
12a00 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
12a10 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46  dex */.  u16 nXF
12a20 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
12a30 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
12a40 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79  s beyond the key
12a50 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71   columns */.  sq
12a60 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
12a70 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
12a80 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
12a90 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
12aa0 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
12ab0 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
12ac0 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
12ad0 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
12ae0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
12af0 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
12b00 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
12b10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  };../*.** This o
12b20 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
12b30 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
12b40 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
12b50 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
12b60 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
12b70 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
12b80 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
12b90 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
12ba0 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
12bb0 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
12bc0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
12bd0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
12be0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
12bf0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
12c00 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
12c10 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
12c20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
12c30 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
12c40 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
12c50 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
12c60 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
12c70 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
12c80 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
12c90 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
12ca0 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
12cb0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
12cc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12cd0 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
12ce0 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
12cf0 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
12d00 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
12d10 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
12d20 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
12d30 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
12d40 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
12d50 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
12d60 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
12d70 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
12d80 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
12d90 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
12da0 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
12db0 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
12dc0 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
12dd0 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
12de0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
12df0 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
12e00 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
12e10 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
12e20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
12e30 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
12e40 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
12e50 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
12e60 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
12e70 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
12e80 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
12e90 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
12ea0 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
12eb0 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
12ec0 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
12ed0 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
12ee0 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
12ef0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
12f00 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
12f10 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
12f20 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
12f30 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
12f40 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
12f50 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
12f60 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
12f70 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
12f80 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
12f90 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
12fa0 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
12fb0 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
12fc0 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
12fd0 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
12fe0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
12ff0 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
13000 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
13010 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
13020 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
13030 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
13040 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
13050 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
13060 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
13070 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
13080 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
13090 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
130a0 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
130b0 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
130c0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
130d0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
130e0 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
130f0 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
13100 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
13110 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
13120 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
13130 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
13140 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
13150 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
13160 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
13170 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
13180 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
13190 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
131a0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
131b0 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
131c0 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
131d0 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
131e0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
131f0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
13200 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
13210 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
13220 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
13230 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
13240 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
13250 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
13260 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
13270 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
13280 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
13290 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
132a0 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
132b0 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
132c0 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
132d0 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
132e0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
132f0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
13300 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
13310 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
13320 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
13330 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
13340 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
13350 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
13360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13370 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
13380 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29  n if (rhs < lhs)
13390 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
133a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
133b0 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
133c0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
133d0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
133e0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
133f0 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
13400 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
13410 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
13420 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
13430 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
13440 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
13450 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
13460 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
13470 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
13480 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
13490 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
134a0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
134b0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
134c0 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
134d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
134e0 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
134f0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
13500 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
13510 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
13520 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
13530 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
13540 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
13550 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
13560 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
13570 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
13580 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
13590 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
135a0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
135b0 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
135c0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
135d0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
135e0 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
135f0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
13600 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
13610 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
13620 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
13630 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
13640 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
13650 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
13660 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
13670 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
13680 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
13690 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
136a0 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
136b0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
136c0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
136d0 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
136e0 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
136f0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
13700 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
13710 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
13720 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
13730 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
13740 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
13750 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
13760 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
13770 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
13780 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
13790 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
137a0 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
137b0 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
137c0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
137d0 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
137e0 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
137f0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
13800 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
13810 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
13820 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
13830 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
13840 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
13850 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
13860 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
13870 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
13880 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
13890 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
138a0 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
138b0 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
138c0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
138d0 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
138e0 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
138f0 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
13900 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
13910 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
13920 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
13930 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
13940 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
13950 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
13960 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
13970 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
13980 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
13990 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
139a0 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
139b0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
139c0 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
139d0 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
139e0 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
139f0 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
13a00 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
13a10 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
13a20 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
13a30 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
13a40 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
13a50 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
13a60 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
13a70 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
13a80 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
13a90 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
13aa0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
13ab0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
13ac0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
13ad0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
13ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
13af0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
13b00 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
13b10 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
13b20 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
13b30 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
13b40 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
13b50 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
13b60 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
13b70 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
13b80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
13b90 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
13ba0 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
13bb0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
13bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
13bd0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
13be0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
13bf0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
13c00 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
13c10 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
13c20 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
13c30 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
13c40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
13c50 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
13c60 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
13c70 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
13c80 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
13c90 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
13ca0 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
13cb0 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
13cc0 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
13cd0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
13ce0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
13cf0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
13d00 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
13d10 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
13d20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
13d30 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
13d40 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
13d50 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
13d60 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
13d70 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
13d80 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
13d90 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13db0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
13dc0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
13dd0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
13de0 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
13df0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
13e00 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
13e10 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
13e20 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
13e30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13e40 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
13e50 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
13e60 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
13e70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13e80 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
13e90 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
13ea0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
13eb0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
13ec0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
13ed0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
13ee0 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
13ef0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
13f00 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
13f10 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
13f20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
13f30 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
13f40 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
13f50 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
13f60 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
13f70 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
13f80 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
13f90 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
13fa0 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
13fb0 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
13fc0 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
13fd0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
13fe0 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
13ff0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
14000 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
14010 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
14020 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
14030 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
14040 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
14050 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
14060 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67  index */.  unsig
14070 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31  ned noSkipScan:1
14080 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72  ;   /* Do not tr
14090 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63  y to use skip-sc
140a0 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69  an if true */.#i
140b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
140c0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
140d0 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
140f0 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
14100 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
14110 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
14120 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
14130 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
14140 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
14150 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
14160 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
14170 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
14180 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
14190 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
141a0 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
141b0 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
141c0 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
141d0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
141e0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
141f0 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
14200 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
14210 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
14220 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
14230 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
14240 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
14250 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
14260 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
14270 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
14280 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
14290 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
142a0 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
142b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
142c0 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
142d0 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
142e0 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
142f0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
14300 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
14310 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
14320 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
14330 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
14340 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
14350 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
14360 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
14370 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
14380 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
14390 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
143a0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
143b0 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
143c0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
143d0 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
143e0 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
143f0 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
14400 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
14410 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
14420 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
14430 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
14440 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
14450 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
14460 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
14470 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64  one)../* The Ind
14480 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61  ex.aiColumn[] va
14490 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  lues are normall
144a0 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  y positive integ
144b0 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72  er.  But.** ther
144c0 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74  e are some negat
144d0 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20  ive values that 
144e0 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61  have special mea
144f0 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  ning:.*/.#define
14500 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d   XN_ROWID     (-
14510 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  1)     /* Indexe
14520 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  d column is the 
14530 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
14540 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d   XN_EXPR      (-
14550 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  2)     /* Indexe
14560 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  d column is an e
14570 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a  xpression */../*
14580 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
14590 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
145a0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
145b0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
145c0 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69  in memory.** usi
145d0 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
145e0 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
145f0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
14600 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
14610 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
14620 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
14630 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
14640 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
14650 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
14660 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
14670 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
14680 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
14690 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
146a0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
146b0 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
146c0 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
146d0 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
146e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
146f0 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
14700 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
14710 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14720 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
14730 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
14740 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
14750 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
14760 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
14770 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
14780 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
14790 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
147a0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
147b0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
147c0 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
147d0 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
147e0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
147f0 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
14800 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
14810 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
14820 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
14830 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
14840 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
14850 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
14860 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
14870 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
14880 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
14890 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
148a0 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
148b0 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
148c0 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
148d0 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
148e0 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
148f0 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
14900 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
14910 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
14920 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
14930 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
14940 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
14950 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
14960 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
14970 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
14980 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14990 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
149a0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
149b0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
149c0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
149d0 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
149e0 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
149f0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
14a00 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
14a10 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
14a20 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
14a30 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
14a40 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
14a50 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
14a60 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
14a70 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
14a80 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
14a90 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
14aa0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
14ab0 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
14ac0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
14ad0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
14ae0 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
14af0 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
14b00 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
14b10 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
14b20 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
14b30 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
14b40 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
14b50 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
14b60 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
14b70 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
14b80 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
14b90 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
14ba0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
14bb0 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
14bc0 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
14bd0 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
14be0 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
14bf0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
14c00 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
14c10 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
14c20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
14c50 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
14c60 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
14c70 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
14c80 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
14c90 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
14ca0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
14cb0 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
14cc0 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
14cf0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14d00 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
14d10 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
14d20 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
14d30 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
14d40 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
14d50 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
14d60 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
14d70 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
14d80 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
14d90 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
14da0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
14db0 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
14dc0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
14dd0 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
14de0 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
14df0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
14e00 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
14e10 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
14e20 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
14e30 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
14e40 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
14e50 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
14e60 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
14e70 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
14e80 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
14e90 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
14ea0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
14eb0 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
14ec0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
14ed0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
14ee0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
14ef0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
14f00 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
14f10 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
14f20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
14f30 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
14f40 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14f50 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
14f60 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
14f70 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
14f80 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
14f90 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
14fa0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
14fb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
14fc0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
14fd0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
14fe0 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
14ff0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
15000 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
15010 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
15020 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
15030 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
15040 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15050 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
15060 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
15070 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
15080 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
15090 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
150a0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
150b0 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
150e0 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
150f0 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
15100 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
15130 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
15140 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
15150 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
15160 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
15170 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
15180 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
15190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
151a0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
151b0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
151c0 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
151d0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
151e0 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
151f0 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
15200 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
15210 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
15220 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
15230 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
15240 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
15250 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
15260 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
15270 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
15280 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
15290 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
152a0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
152b0 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
152c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
152d0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
152e0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
152f0 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
15300 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
15310 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
15320 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
15330 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
15340 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
15350 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
15360 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
15370 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
15380 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
15390 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
153a0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
153b0 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
153c0 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
153d0 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
153e0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
153f0 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
15400 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
15410 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
15420 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
15430 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
15440 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
15450 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
15460 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
15470 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
15480 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
15490 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
154a0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
154b0 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
154c0 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
154d0 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
154e0 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
154f0 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
15500 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
15510 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
15520 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
15530 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
15540 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
15550 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
15560 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
15570 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
15580 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
15590 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
155a0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
155b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
155c0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
155d0 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
155e0 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
155f0 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
15600 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
15610 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
15620 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
15630 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
15640 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
15650 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
15660 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
15670 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
15680 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
15690 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
156a0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
156b0 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
156c0 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
156d0 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
156e0 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
156f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
15700 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
15710 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
15720 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
15730 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
15740 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
15750 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
15760 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
15770 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
15780 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
15790 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
157a0 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
157b0 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
157c0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
157d0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
157e0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
157f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
15800 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
15810 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
15820 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
15830 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
15840 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
15850 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
15860 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
15870 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
15880 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
15890 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
158a0 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
158b0 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
158c0 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
158d0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
158e0 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
158f0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
15900 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
15910 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
15920 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
15930 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
15940 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
15950 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
15960 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
15970 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
15980 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
15990 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
159a0 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
159b0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
159c0 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
159d0 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
159e0 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
159f0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
15a00 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
15a10 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
15a20 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
15a30 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
15a40 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
15a50 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
15a60 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
15a70 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
15a80 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
15a90 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
15aa0 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
15ab0 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
15ac0 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
15ad0 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
15ae0 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
15af0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
15b00 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
15b10 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
15b20 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
15b30 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
15b40 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
15b50 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
15b60 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
15b70 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
15b80 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
15b90 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
15ba0 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
15bb0 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
15bc0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
15bd0 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
15be0 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
15bf0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
15c00 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
15c10 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
15c20 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
15c30 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
15c40 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
15c50 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15c60 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
15c70 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
15c80 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
15c90 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
15ca0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
15cb0 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
15cc0 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
15cd0 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
15ce0 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
15cf0 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
15d00 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
15d10 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
15d20 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
15d30 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
15d40 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
15d50 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
15d60 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
15d70 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
15d80 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
15d90 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
15da0 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
15db0 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
15dc0 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
15dd0 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
15de0 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
15df0 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
15e00 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
15e10 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
15e20 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
15e30 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
15e40 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
15e50 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
15e60 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
15e70 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
15e80 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
15e90 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
15ea0 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
15eb0 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
15ec0 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
15ed0 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
15ee0 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
15ef0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
15f00 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
15f10 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
15f20 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
15f30 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
15f40 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
15f50 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
15f60 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
15f70 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
15f80 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
15f90 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
15fa0 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
15fb0 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
15fc0 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
15fd0 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
15fe0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
15ff0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
16000 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
16010 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
16020 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
16030 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
16040 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
16050 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
16060 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
16070 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
16080 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
16090 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
160a0 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
160b0 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
160c0 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
160d0 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
160e0 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
160f0 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
16100 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
16110 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
16120 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
16130 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
16140 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
16150 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
16160 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
16170 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
16180 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
16190 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
161a0 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
161b0 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
161c0 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
161d0 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
161e0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
161f0 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
16200 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
16210 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
16220 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16230 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
16240 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
16250 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
16260 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
16270 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
16280 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
16290 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
162a0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
162b0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
162c0 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
162d0 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
162e0 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
162f0 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
16300 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
16310 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
16320 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
16330 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
16340 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
16350 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
16360 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
16370 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
16380 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
16390 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
163a0 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
163b0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
163c0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
163d0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
163e0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
163f0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
16400 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
16410 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
16420 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
16430 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
16440 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
16450 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
16460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
164a0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
164b0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
164c0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
164d0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
164e0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
164f0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
16500 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
16510 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
16520 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
16530 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
16540 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
16550 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
16560 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
16570 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
16580 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
16590 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
165a0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
165b0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
165c0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
165d0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
165e0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
165f0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
16600 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
16610 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
16620 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
16630 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
16640 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
16650 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
16660 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
16670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
166a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
166b0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
166c0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
166d0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
166e0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
166f0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
16700 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
16710 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
16720 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
16730 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
16740 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
16750 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
16760 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
16790 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
167c0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
167d0 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
16800 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
16810 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
16820 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
16830 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
16840 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
16850 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
16860 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
16890 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
168a0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
168b0 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
168c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
168d0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
168e0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
168f0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
16900 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
16910 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
16920 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
16930 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
16940 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
16950 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
16960 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
16970 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
16980 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
169b0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
169c0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
169d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
169e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
169f0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
16a00 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
16a10 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
16a20 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
16a30 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
16a40 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
16a50 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
16a60 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
16a70 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
16a80 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
16a90 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
16aa0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
16ab0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
16ac0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
16ad0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
16ae0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
16af0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
16b00 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
16b10 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
16b20 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
16b30 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
16b40 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
16b50 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
16b60 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
16b70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
16b80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
16b90 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
16ba0 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
16bb0 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
16bc0 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
16bd0 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
16be0 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
16bf0 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
16c00 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
16c10 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
16c20 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
16c30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
16c40 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
16c50 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
16c60 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
16c70 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
16c80 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
16c90 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
16ca0 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
16cb0 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
16cc0 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
16cd0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
16ce0 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
16cf0 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
16d00 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
16d10 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
16d20 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
16d30 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
16d40 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
16d50 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
16d60 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
16d70 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
16d80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
16d90 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
16da0 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
16db0 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
16dc0 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
16dd0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
16de0 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
16df0 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
16e00 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
16e10 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
16e20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
16e30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
16e40 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
16e50 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
16e60 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
16e70 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
16e80 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
16e90 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
16ea0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
16eb0 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
16ec0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
16ed0 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
16ee0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
16ef0 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
16f00 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
16f10 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
16f20 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
16f30 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
16f40 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
16f50 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
16f60 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
16f70 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
16f80 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
16f90 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
16fa0 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
16fb0 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
16fc0 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
16fd0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
16fe0 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
16ff0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
17000 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
17010 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
17020 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
17030 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
17040 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
17050 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
17060 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
17070 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
17080 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  A SQLITE_FUNC_CO
17090 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48  NSTANT or _SLOCH
170a0 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  NG function */.#
170b0 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e  define EP_CanBeN
170c0 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ull 0x100000 /* 
170d0 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
170e0 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
170f0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
17100 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
17110 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65  0x200000 /* Tree
17120 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53   contains a TK_S
17130 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a  ELECT operator *
17140 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69  /.#define EP_Ali
17150 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20  as     0x400000 
17160 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66  /* Is an alias f
17170 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  or a result set 
17180 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  column */../*.**
17190 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66   Combinations of
171a0 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f   two or more EP_
171b0 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  * flags.*/.#defi
171c0 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
171d0 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
171e0 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70  ubquery) /* Prop
171f0 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73  agate these bits
17200 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a   up tree */../*.
17210 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
17220 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
17230 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
17240 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
17250 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
17260 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
17270 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
17280 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
17290 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
172a0 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
172b0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
172c0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
172d0 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
172e0 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
172f0 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
17300 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
17310 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
17320 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
17330 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
17340 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
17350 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
17360 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
17370 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
17380 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
17390 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
173a0 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
173b0 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
173c0 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
173d0 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
173e0 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
173f0 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
17400 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
17410 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
17420 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
17430 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
17440 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
17450 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
17460 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
17470 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
17480 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
17490 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
174a0 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
174b0 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  xpr.** struct, a
174c0 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
174d0 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
174e0 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
174f0 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20  pr.flags.** and 
17500 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
17510 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
17520 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
17530 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
17540 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
17550 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
17560 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
17570 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
17580 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
17590 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
175a0 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
175b0 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
175c0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
175d0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
175e0 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
175f0 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
17600 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
17610 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
17620 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
17630 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
17640 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
17650 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a  header comment.*
17660 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
17670 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
17680 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
17690 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
176a0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
176b0 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
176c0 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
176d0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
176e0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
176f0 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
17700 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
17710 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
17720 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
17730 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
17740 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
17750 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
17760 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
17770 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
17780 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
17790 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
177a0 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
177b0 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
177c0 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
177d0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
177e0 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
177f0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
17800 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
17810 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
17820 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
17830 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
17840 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
17850 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
17860 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
17870 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
17880 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
17890 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
178a0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
178b0 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
178c0 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
178d0 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
178e0 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
178f0 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
17900 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
17910 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
17920 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
17930 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
17940 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
17950 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
17960 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
17970 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
17980 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
17990 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
179a0 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
179b0 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
179c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
179d0 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
179e0 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
179f0 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
17a00 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
17a10 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
17a20 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
17a30 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
17a40 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
17a50 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
17a60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17a70 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
17a80 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
17a90 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
17aa0 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
17ab0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
17ac0 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
17ad0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17ae0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69         /* The li
17af0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
17b00 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  s */.    char *z
17b10 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
17b20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
17b30 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
17b40 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
17b50 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
17b60 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
17b70 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
17b80 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
17b90 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
17ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
17bb0 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
17bc0 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
17bd0 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
17be0 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
17bf0 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
17c00 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
17c10 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
17c20 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
17c30 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
17c40 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
17c50 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69  LUMN */.    unsi
17c60 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31  gned reusable :1
17c70 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  ;   /* Constant 
17c80 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65  expression is re
17c90 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e  usable */.    un
17ca0 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75  ion {.      stru
17cb0 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36  ct {.        u16
17cc0 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
17cd0 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
17ce0 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
17cf0 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
17d00 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69  */.        u16 i
17d10 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
17d20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
17d30 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
17d40 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20  r zName */.     
17d50 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20   } x;.      int 
17d60 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20  iConstExprReg;  
17d70 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
17d80 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61  in which Expr va
17d90 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f  lue is cached */
17da0 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61  .    } u;.  } *a
17db0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17dc0 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f     /* Alloc a po
17dd0 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74  wer of two great
17de0 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e  er or equal to n
17df0 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Expr */.};../*.*
17e00 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
17e10 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
17e20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
17e30 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
17e40 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
17e50 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
17e60 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
17e70 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
17e80 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
17e90 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
17ea0 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
17eb0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
17ec0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
17ed0 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
17ee0 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
17ef0 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
17f00 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
17f10 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
17f20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
17f30 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
17f40 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
17f50 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
17f60 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
17f70 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
17f80 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
17f90 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
17fa0 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
17fb0 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
17fc0 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
17fd0 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
17fe0 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
17ff0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
18000 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
18010 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
18020 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
18030 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
18040 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
18050 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
18060 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
18070 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
18080 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
18090 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
180a0 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
180b0 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
180c0 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
180d0 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
180e0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
180f0 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
18100 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
18110 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
18120 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
18130 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
18140 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
18150 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
18160 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
18170 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
18180 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
18190 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
181a0 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
181b0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
181c0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
181d0 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
181e0 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
181f0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
18200 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
18210 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
18220 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
18230 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
18240 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18250 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
18260 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
18270 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
18280 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
18290 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
182a0 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
182b0 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
182c0 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
182d0 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
182e0 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
182f0 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
18300 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
18310 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
18320 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
18330 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
18340 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
18350 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
18360 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
18370 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
18380 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
18390 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
183a0 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
183b0 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
183c0 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
183d0 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
183e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
183f0 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
18400 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
18410 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
18420 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
18430 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
18440 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
18450 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
18460 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
18470 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
18480 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
18490 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
184a0 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
184b0 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
184c0 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
184d0 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
184e0 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  ask)-1)../*.** T
184f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
18500 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
18510 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
18520 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
18530 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
18540 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
18550 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
18560 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
18570 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
18580 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
18590 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
185a0 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
185b0 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
185c0 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
185d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
185e0 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
185f0 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
18600 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
18610 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
18620 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
18630 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
18640 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
18650 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
18660 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
18670 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
18680 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
18690 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
186a0 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
186b0 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
186c0 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
186d0 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
186e0 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
186f0 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
18700 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
18710 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
18720 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
18730 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
18740 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
18750 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
18760 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
18770 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
18780 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
18790 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
187a0 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
187b0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
187c0 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
187d0 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
187e0 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
187f0 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
18800 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
18810 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
18820 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
18830 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
18840 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
18850 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
18860 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
18870 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
18880 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
18890 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
188a0 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
188b0 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
188c0 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
188d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
188e0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
188f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
18900 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
18910 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
18920 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
18930 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
18940 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18950 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
18960 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
18970 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
18980 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
18990 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
189a0 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
189b0 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
189c0 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
189d0 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
189e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
189f0 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
18a00 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
18a10 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
18a20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
18a30 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
18a40 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
18a50 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
18a60 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
18a70 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
18a80 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
18a90 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
18aa0 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
18ab0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
18ac0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
18ad0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
18ae0 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
18af0 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
18b00 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
18b10 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
18b20 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
18b30 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
18b40 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
18b50 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
18b60 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
18b70 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
18b80 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
18b90 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
18ba0 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
18bb0 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
18bc0 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
18bd0 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
18be0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
18bf0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
18c00 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
18c10 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
18c20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
18c30 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
18c40 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
18c50 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
18c60 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
18c70 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
18c80 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
18c90 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
18ca0 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
18cb0 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
18cc0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
18cd0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
18ce0 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
18cf0 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
18d00 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
18d10 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
18d20 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
18d30 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
18d40 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
18d50 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
18d60 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
18d70 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
18d80 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
18d90 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
18da0 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
18db0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
18dc0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
18dd0 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
18de0 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
18df0 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
18e00 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
18e10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
18e20 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20  OMIT_EXPLAIN.   
18e30 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20   u8 iSelectId;  
18e40 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74     /* If pSelect
18e50 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74  !=0, the id of t
18e60 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e  he sub-select in
18e70 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20   EQP */.#endif. 
18e80 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
18e90 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
18ea0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
18eb0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
18ec0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
18ed0 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
18ee0 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
18ef0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
18f00 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
18f10 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
18f20 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
18f30 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
18f40 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
18f50 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
18f60 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
18f70 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
18f80 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
18f90 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64    char *zIndexed
18fa0 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  By;    /* Identi
18fb0 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
18fc0 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
18fd0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
18fe0 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41  ExprList *pFuncA
18ff0 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74  rg;  /* Argument
19000 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65  s to table-value
19010 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  d-function */.  
19020 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65    } u1;.    Inde
19030 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a  x *pIBIndex;  /*
19040 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
19050 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
19060 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20  o u1.zIndexedBy 
19070 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
19080 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
19090 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
190a0 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
190b0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
190c0 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
190d0 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
190e0 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
190f0 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
19100 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
19110 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
19120 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
19130 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
19140 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
19150 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
19160 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
19170 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
19180 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
19190 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
191a0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
191b0 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
191c0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
191d0 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
191e0 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
191f0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
19200 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
19210 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
19220 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
19230 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
19240 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
19250 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
19260 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
19270 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
19280 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
19290 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
192a0 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
192b0 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
192c0 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
192d0 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
192e0 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
192f0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
19300 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
19310 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
19320 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
19330 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
19340 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
19350 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
19360 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19370 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
19380 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
19390 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
193a0 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
193b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
193c0 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
193d0 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
193e0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
193f0 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
19400 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
19410 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
19420 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
19430 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
19440 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
19450 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
19460 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
19470 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
19480 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
19490 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
194a0 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
194b0 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
194c0 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
194d0 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
194e0 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
194f0 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
19500 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
19510 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
19520 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
19530 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19540 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
19550 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
19560 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
19570 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
19580 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19590 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20  _NO_AUTOINDEX   
195a0 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61    0x0080 /* Disa
195b0 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69  llow automatic i
195c0 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
195d0 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
195e0 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
195f0 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
19600 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
19610 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19620 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
19630 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72     0x0200 /* pOr
19640 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
19650 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
19660 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
19670 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
19680 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c      0x0400 /* Al
19690 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
196a0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
196b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
196c0 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
196d0 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0800 /* Suppor
196e0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
196f0 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
19700 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e  ine WHERE_REOPEN
19710 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30  _IDX       0x100
19720 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20  0 /* Try to use 
19730 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a  OP_ReopenIdx */.
19740 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
19750 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
19760 78 32 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53  x2000 /* ONEPASS
19770 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
19780 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
19790 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c  fine WHERE_USE_L
197a0 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34 30  IMIT        0x40
197b0 30 30 20 2f 2a 20 54 68 65 72 65 20 69 73 20 61  00 /* There is a
197c0 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20   constant LIMIT 
197d0 63 6c 61 75 73 65 20 2a 2f 0a 0a 2f 2a 20 41 6c  clause */../* Al
197e0 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
197f0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
19800 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
19810 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ).*/.#define WHE
19820 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50  RE_DISTINCT_NOOP
19830 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54        0  /* DIST
19840 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74  INCT keyword not
19850 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
19860 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
19870 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20  UNIQUE    1  /* 
19880 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f  No duplicates */
19890 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
198a0 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20  ISTINCT_ORDERED 
198b0 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c    2  /* All dupl
198c0 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63  icates are adjac
198d0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ent */.#define W
198e0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
198f0 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75  ORDERED 3  /* Du
19900 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61  plicates are sca
19910 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ttered */../*.**
19920 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64   A NameContext d
19930 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74  efines a context
19940 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73   in which to res
19950 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63  olve table and c
19960 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20  olumn.** names. 
19970 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   The context con
19980 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20  sists of a list 
19990 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70  of tables (the p
199a0 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61  SrcList) field a
199b0 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20  nd.** a list of 
199c0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
199d0 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20   (pEList).  The 
199e0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
199f0 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20   list may.** be 
19a00 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20  NULL.  The pSrc 
19a10 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
19a20 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
19a30 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a  f a SELECT or.**
19a40 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65   to the table be
19a50 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
19a60 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
19a70 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54  E, or DELETE.  T
19a80 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72  he.** pEList cor
19a90 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
19aa0 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
19ab0 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55  SELECT and is NU
19ac0 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20  LL for.** other 
19ad0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
19ae0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63  * NameContexts c
19af0 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57  an be nested.  W
19b00 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  hen resolving na
19b10 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d  mes, the inner-m
19b20 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ost.** context i
19b30 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
19b40 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
19b50 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
19b60 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
19b70 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
19b80 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
19b90 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
19ba0 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
19bb0 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
19bc0 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
19bd0 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
19be0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
19bf0 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
19c00 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
19c10 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
19c20 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
19c30 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
19c40 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
19c50 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
19c60 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
19c70 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
19c80 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
19c90 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
19ca0 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
19cb0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
19cc0 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
19cd0 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
19ce0 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
19cf0 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
19d00 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
19d10 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
19d20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
19d30 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
19d40 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
19d50 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
19d60 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
19d70 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
19d80 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
19d90 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
19da0 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
19db0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
19dc0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
19dd0 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
19de0 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
19df0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
19e00 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
19e10 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
19e20 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
19e30 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
19e40 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
19e50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
19e60 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
19e70 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
19e80 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
19e90 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
19ea0 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
19eb0 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
19ec0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
19ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19ee0 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
19ef0 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
19f00 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
19f10 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
19f20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
19f30 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
19f40 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
19f50 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20   names */.  u16 
19f60 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ncFlags;        
19f70 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
19f80 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
19f90 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
19fa0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
19fb0 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
19fc0 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
19fd0 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
19fe0 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78  Note:  NC_MinMax
19ff0 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74 68  Agg must have th
1a000 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
1a010 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64  SF_MinMaxAgg and
1a020 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
1a030 4d 49 4e 4d 41 58 2e 0a 2a 2a 0a 2a 2f 0a 23 64  MINMAX..**.*/.#d
1a040 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1a050 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1a060 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1a070 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1a080 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1a090 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30 30  _HasAgg    0x000
1a0a0 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  2  /* One or mor
1a0b0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
1a0c0 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
1a0d0 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b  efine NC_IsCheck
1a0e0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72     0x0004  /* Tr
1a0f0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1a100 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
1a110 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
1a120 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
1a130 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54  unc 0x0008  /* T
1a140 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67  rue if analyzing
1a150 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e   arguments to an
1a160 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65   agg func */.#de
1a170 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20  fine NC_PartIdx 
1a180 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75    0x0010  /* Tru
1a190 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61  e if resolving a
1a1a0 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57   partial index W
1a1b0 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  HERE */.#define 
1a1c0 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1a1d0 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1a1e0 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1a1f0 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1a200 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1a210 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1a220 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1a230 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1a240 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1a250 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1a260 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1a270 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1a280 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
1a290 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
1a2a0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
1a2b0 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
1a2c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1a2d0 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
1a2e0 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
1a2f0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
1a300 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
1a310 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
1a320 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
1a330 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
1a340 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
1a350 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
1a360 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
1a370 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
1a380 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1a390 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
1a3a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
1a3b0 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
1a3c0 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
1a3d0 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
1a3e0 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
1a3f0 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
1a400 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
1a410 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
1a420 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
1a430 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1a440 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1a450 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1a460 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1a470 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1a480 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1a490 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1a4a0 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1a4b0 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1a4c0 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1a4d0 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1a4e0 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1a4f0 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1a500 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1a510 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1a520 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1a530 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1a540 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1a550 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1a560 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1a570 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1a580 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1a590 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1a5a0 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1a5b0 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1a5c0 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1a5d0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1a5e0 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1a5f0 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1a600 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1a610 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1a620 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1a630 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1a640 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1a650 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1a660 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1a670 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1a680 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1a690 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1a6a0 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1a6b0 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1a6c0 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1a6d0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1a6e0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1a6f0 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1a700 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1a710 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1a720 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1a730 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1a740 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1a750 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1a760 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1a770 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1a780 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1a790 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1a7a0 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1a7b0 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1a7c0 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1a7d0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20  counters */.#if 
1a7e0 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1a7f0 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e  LED.  char zSelN
1a800 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20  ame[12];     /* 
1a810 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66  Symbolic name of
1a820 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65   this SELECT use
1a830 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a   for debugging *
1a840 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
1a850 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1a860 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1a870 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1a880 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1a890 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1a8a0 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1a8b0 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1a8c0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1a8d0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1a8e0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1a8f0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1a900 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1a910 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1a920 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1a930 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1a940 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1a950 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1a960 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1a970 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1a980 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1a990 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1a9a0 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1a9b0 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1a9c0 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1a9d0 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1a9e0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1a9f0 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1aa00 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1aa10 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1aa20 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1aa30 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1aa40 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1aa50 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1aa60 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
1aa70 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
1aa80 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
1aa90 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1aaa0 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1aab0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1aac0 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1aad0 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1aae0 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1aaf0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
1ab00 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1ab10 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
1ab20 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
1ab30 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
1ab40 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
1ab50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
1ab60 73 74 69 6e 63 74 20 20 20 20 20 20 20 30 78 30  stinct       0x0
1ab70 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
1ab80 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
1ab90 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
1aba0 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  _All            
1abb0 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c  0x00002  /* Incl
1abc0 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79  udes the ALL key
1abd0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1abe0 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
1abf0 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64    0x00004  /* Id
1ac00 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
1ac10 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
1ac20 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
1ac30 67 61 74 65 20 20 20 20 20 20 30 78 30 30 30 30  gate      0x0000
1ac40 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  8  /* Contains a
1ac50 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ac60 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
1ac70 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
1ac80 30 78 30 30 30 31 30 20 20 2f 2a 20 55 73 65 73  0x00010  /* Uses
1ac90 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
1aca0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
1acb0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
1acc0 20 20 20 20 20 20 20 30 78 30 30 30 32 30 20 20         0x00020  
1acd0 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
1ace0 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
1acf0 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
1ad00 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
1ad10 6f 20 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a  o    0x00040  /*
1ad20 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
1ad30 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
1ad40 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
1ad50 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
1ad60 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20 50 61    0x00080  /* Pa
1ad70 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
1ad80 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
1ad90 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
1ada0 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1adb0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
1adc0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
1add0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
1ade0 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30  tiValue     0x00
1adf0 32 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  200  /* Single V
1ae00 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
1ae10 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1ae20 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
1ae30 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 34  edFrom     0x004
1ae40 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1ae50 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
1ae60 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
1ae70 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
1ae80 6e 76 65 72 74 20 20 20 30 78 30 30 38 30 30 20  nvert   0x00800 
1ae90 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
1aea0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1aeb0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1aec0 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
1aed0 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20  gg      0x01000 
1aee0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
1aef0 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
1af00 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
1af10 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
1af20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a       0x02000  /*
1af30 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
1af40 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
1af50 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
1af60 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20  e SF_FixedLimit 
1af70 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20      0x04000  /* 
1af80 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62  nSelectRow set b
1af90 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d  y a constant LIM
1afa0 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT */.#define SF
1afb0 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20  _Converted      
1afc0 30 78 30 38 30 30 30 20 20 2f 2a 20 42 79 20 63  0x08000  /* By c
1afd0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1afe0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1aff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49   */.#define SF_I
1b000 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78  ncludeHidden  0x
1b010 31 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64  10000  /* Includ
1b020 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
1b030 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a   in output */...
1b040 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1b050 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1b060 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1b070 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1b080 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1b090 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1b0a0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1b0b0 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1b0c0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1b0d0 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1b0e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1b0f0 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1b100 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1b110 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1b120 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20   index.**       
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
1b140 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
1b150 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1b160 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
1b170 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
1b180 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
1b190 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
1b1a0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1b1b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
1b1c0 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
1b1d0 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
1b1e0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1b1f0 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
1b220 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
1b230 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1b240 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
1b250 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
1b260 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
1b270 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b280 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1b290 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1b2a0 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
1b2b0 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
1b2e0 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
1b2f0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
1b300 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
1b310 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
1b320 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
1b330 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
1b340 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
1b350 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1b360 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1b370 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
1b380 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
1b390 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
1b3a0 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
1b3b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b3c0 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
1b3d0 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1b3e0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
1b3f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
1b400 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
1b410 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
1b420 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
1b430 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
1b450 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
1b460 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
1b470 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
1b4a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
1b4b0 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
1b4c0 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
1b4d0 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1b4e0 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
1b4f0 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
1b500 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
1b510 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
1b520 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
1b530 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
1b540 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
1b550 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b570 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
1b580 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
1b590 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
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 41 70 70 6c 79 20 74 68          Apply th
1b5c0 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1b5d0 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1b5e0 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1b610 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1b620 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1b630 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1b640 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1b650 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1b660 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1b670 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1b6a0 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1b6b0 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1b6c0 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1b6d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b6e0 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1b6f0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1b700 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1b730 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1b740 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1b750 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b760 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1b770 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1b780 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1b790 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1b7a0 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1b7b0 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1b7c0 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1b7d0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1b7e0 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1b7f0 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1b800 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1b830 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1b840 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1b850 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b870 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1b880 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1b890 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1b8a0 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b8c0 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1b8d0 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1b8e0 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1b8f0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1b900 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1b910 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1b920 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1b930 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1b940 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1b950 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1b960 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1b990 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1b9a0 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1b9b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b9c0 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1b9d0 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1b9e0 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1b9f0 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ba10 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1ba20 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1ba30 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1ba40 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1ba50 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1ba60 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1ba70 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ba80 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1ba90 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1baa0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1bab0 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bad0 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1bae0 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1baf0 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1bb00 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1bb20 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1bb30 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1bb40 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1bb50 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1bb60 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1bb70 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1bb80 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1bb90 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1bba0 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1bbb0 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1bbc0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1bbd0 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1bbe0 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1bbf0 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1bc00 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1bc10 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1bc20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1bc30 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1bc40 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1bc50 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1bc80 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1bc90 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1bca0 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1bcb0 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1bcc0 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1bcd0 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1bce0 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1bcf0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1bd00 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1bd10 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1bd20 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1bd30 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1bd40 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1bd50 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1bd60 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1bd70 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1bd80 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1bd90 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1bda0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1bdb0 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1bdc0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1bdd0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1bde0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1bdf0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1be00 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1be10 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1be20 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1be30 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1be40 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1be50 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1be60 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1be70 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1be80 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1be90 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1bea0 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1beb0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1bec0 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1bed0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1bee0 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1bef0 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1bf00 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1bf10 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1bf20 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1bf30 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1bf40 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1bf50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1bf60 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1bf70 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1bf80 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1bf90 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1bfa0 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1bfb0 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1bfc0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1bfd0 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1bfe0 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1bff0 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1c000 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1c010 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1c020 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1c030 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1c040 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1c050 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1c060 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1c070 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1c080 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1c090 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1c0a0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1c0b0 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1c0c0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1c0d0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1c0e0 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1c0f0 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
1c100 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1c110 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1c120 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
1c130 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1c140 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
1c150 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
1c160 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
1c170 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
1c180 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1c190 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1c1a0 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
1c1b0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
1c1c0 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
1c1d0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
1c1e0 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
1c1f0 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
1c200 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f  ffSdst;        /
1c210 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
1c220 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
1c230 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
1c240 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
1c250 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
1c260 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
1c270 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
1c280 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
1c290 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1c2a0 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
1c2b0 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
1c2c0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
1c2d0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1c2e0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
1c2f0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
1c300 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1c310 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
1c320 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
1c330 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
1c340 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
1c350 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
1c360 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
1c370 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
1c380 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
1c390 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20  UTOINCREMENT.** 
1c3a0 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1c3b0 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1c3c0 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1c3d0 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1c3e0 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1c3f0 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1c400 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1c410 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1c420 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1c430 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1c440 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1c450 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1c460 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1c470 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1c480 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1c490 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65  inserts are done
1c4a0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1c4b0 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1c4c0 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1c4d0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1c4e0 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1c4f0 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1c500 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1c510 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1c520 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1c530 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1c540 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1c550 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1c560 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1c570 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1c580 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1c590 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1c5a0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1c5b0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1c5c0 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1c5d0 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1c5e0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1c5f0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1c600 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1c610 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1c620 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1c630 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1c640 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1c650 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1c660 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1c670 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1c680 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1c690 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1c6a0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1c6b0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c6c0 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1c6d0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1c6e0 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1c6f0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1c700 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1c710 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1c720 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61  h.** trigger tha
1c730 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
1c740 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
1c750 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1c760 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
1c770 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
1c780 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
1c790 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
1c7a0 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
1c7b0 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
1c7c0 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
1c7d0 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
1c7e0 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
1c7f0 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
1c800 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
1c810 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
1c820 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
1c830 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
1c840 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
1c850 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
1c860 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
1c870 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
1c880 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
1c890 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
1c8a0 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
1c8b0 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
1c8c0 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
1c8d0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
1c8e0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1c8f0 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
1c900 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
1c910 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
1c920 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
1c930 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
1c940 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
1c950 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1c960 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
1c970 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
1c980 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1c990 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
1c9a0 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
1c9b0 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
1c9c0 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
1c9d0 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73  RT.** statements
1c9e0 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68  ). Similarly, th
1c9f0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
1ca00 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c  lmask[1] variabl
1ca10 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61  e is set to.** a
1ca20 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   mask of new.* c
1ca30 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74  olumns used by t
1ca40 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73  he program..*/.s
1ca50 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
1ca60 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54   {.  Trigger *pT
1ca70 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20  rigger;      /* 
1ca80 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f  Trigger this pro
1ca90 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66  gram was coded f
1caa0 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  rom */.  Trigger
1cab0 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Prg *pNext;     
1cac0 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
1cad0 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  n Parse.pTrigger
1cae0 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75  Prg list */.  Su
1caf0 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
1cb00 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
1cb10 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
1cb20 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
1cb30 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
1cb40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1cb50 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1cb60 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33  T policy */.  u3
1cb70 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20  2 aColmask[2];  
1cb80 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f        /* Masks o
1cb90 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63  f old.*, new.* c
1cba0 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20  olumns accessed 
1cbb0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1cbc0 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70   yDbMask datatyp
1cbd0 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73  e for the bitmas
1cbe0 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  k of all attache
1cbf0 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1cc00 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
1cc10 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70  TTACHED>30.  typ
1cc20 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
1cc30 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49  ar yDbMask[(SQLI
1cc40 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1cc50 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20  9)/8];.# define 
1cc60 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1cc70 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26     (((M)[(I)/8]&
1cc80 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30  (1<<((I)&7)))!=0
1cc90 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1cca0 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65  kZero(M)      me
1ccb0 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f  mset((M),0,sizeo
1ccc0 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44  f(M)).# define D
1ccd0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1cce0 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31    (M)[(I)/8]|=(1
1ccf0 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66  <<((I)&7)).# def
1cd00 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1cd10 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62  o(M)   sqlite3Db
1cd20 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23  MaskAllZero(M).#
1cd30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1cd40 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69  nZero(M)   (sqli
1cd50 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1cd60 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20  (M)==0).#else.  
1cd70 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1cd80 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20   int yDbMask;.# 
1cd90 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1cda0 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26  t(M,I)    (((M)&
1cdb0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1cdc0 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  I)))!=0).# defin
1cdd0 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1cde0 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66       (M)=0.# def
1cdf0 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1ce00 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79  I)     (M)|=(((y
1ce10 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a  DbMask)1)<<(I)).
1ce20 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1ce30 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d  llZero(M)   (M)=
1ce40 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1ce50 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1ce60 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  M)!=0.#endif../*
1ce70 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
1ce80 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
1ce90 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
1cea0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
1ceb0 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
1cec0 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
1ced0 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
1cee0 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
1cef0 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cf00 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
1cf10 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1cf20 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
1cf30 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
1cf40 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
1cf50 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
1cf60 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
1cf70 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
1cf80 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
1cf90 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
1cfa0 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
1cfb0 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
1cfc0 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
1cfd0 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
1cfe0 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
1cff0 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
1d000 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
1d010 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
1d020 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
1d030 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
1d040 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
1d050 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
1d060 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
1d070 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61  red-cache.** fea
1d080 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1d090 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1d0a0 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1d0b0 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1d0c0 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1d0d0 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1d0e0 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1d0f0 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1d100 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1d110 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1d120 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1d130 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1d140 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1d150 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1d160 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1d170 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1d180 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1d190 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1d1a0 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1d1b0 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1d1c0 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1d1d0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1d1e0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1d1f0 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1d200 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1d210 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1d220 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1d230 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1d240 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1d250 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1d260 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1d270 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1d280 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1d290 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1d2a0 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1d2b0 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1d2c0 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1d2d0 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1d2e0 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1d2f0 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1d300 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1d310 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1d320 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1d330 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1d340 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1d350 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1d360 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1d370 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1d380 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1d390 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1d3a0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1d3b0 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1d3c0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1d3d0 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1d3e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1d3f0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1d400 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1d410 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1d420 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1d430 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1d440 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1d450 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1d460 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1d470 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1d480 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1d490 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1d4a0 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1d4b0 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75  Lookaside; /* Nu
1d4c0 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f  mber of times lo
1d4d0 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e  okaside has been
1d4e0 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69   disabled */.  i
1d4f0 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1d500 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1d510 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1d520 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1d530 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1d540 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1d550 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1d560 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1d570 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1d580 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1d590 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1d5a0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1d5b0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1d5c0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1d5d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1d5e0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1d5f0 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1d600 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d610 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1d620 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1d630 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1d640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1d650 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1d660 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1d670 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1d680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1d690 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1d6a0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1d6b0 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1d6c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d6d0 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1d6e0 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1d6f0 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1d700 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d710 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1d720 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1d730 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70  [] */.  int szOp
1d740 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20  Alloc;       /* 
1d750 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  Bytes of memory 
1d760 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1d770 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1d780 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70  /.  int iFixedOp
1d790 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65  ;        /* Neve
1d7a0 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64  r back out opcod
1d7b0 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72  es iFixedOp-1 or
1d7c0 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e   earlier */.  in
1d7d0 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
1d7e0 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1d7f0 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
1d800 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
1d810 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ints */.  int iS
1d820 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
1d830 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e  * Table of an in
1d840 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20  dex whose exprs 
1d850 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1d860 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1d870 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1d880 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1d890 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1d8a0 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1d8b0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1d8c0 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1d8d0 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1d8e0 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1d8f0 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1d900 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1d910 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d920 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1d930 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1d940 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1d950 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1d960 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75  labels */.  stru
1d970 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1d980 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1d990 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1d9a0 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1d9b0 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1d9c0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1d9d0 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1d9e0 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1d9f0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1da00 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1da10 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1da20 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1da30 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1da40 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1da50 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1da60 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1da70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1da80 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1da90 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1daa0 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1dab0 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1dac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1dad0 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1dae0 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1daf0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1db00 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1db10 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1db20 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1db30 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1db40 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70  e entry */.  Exp
1db50 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
1db60 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
1db70 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
1db80 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
1db90 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
1dba0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
1dbb0 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
1dbc0 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
1dbd0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
1dbe0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
1dbf0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
1dc00 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
1dc10 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
1dc20 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
1dc30 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
1dc40 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
1dc50 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
1dc60 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
1dc70 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
1dc80 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
1dc90 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
1dca0 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1dcb0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1dcc0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1dcd0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1dce0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1dcf0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1dd00 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1dd10 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1dd20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1dd30 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1dd40 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1dd50 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1dd60 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1dd70 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1dd80 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1dd90 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1dda0 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1ddb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ddc0 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1ddd0 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1dde0 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1ddf0 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1de00 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1de10 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1de20 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1de30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1de40 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1de50 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1de60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1de70 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1de80 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1de90 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1dea0 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1deb0 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1dec0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1ded0 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1dee0 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1def0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1df00 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1df10 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1df20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1df30 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1df40 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1df50 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1df60 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1df70 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1df80 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1df90 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1dfa0 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1dfb0 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1dfc0 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1dfd0 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1dfe0 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1dff0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1e000 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1e010 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1e020 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33  TE TABLE */.  u3
1e030 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1e040 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1e050 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1e060 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1e070 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1e080 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1e090 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1e0a0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1e0b0 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1e0c0 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1e0d0 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1e0e0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1e0f0 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1e100 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1e110 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1e120 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1e130 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1e140 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1e150 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e160 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1e170 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1e180 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1e190 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1e1a0 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1e1b0 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1e1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e1f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e200 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1e210 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1e220 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1e230 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1e240 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1e250 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1e260 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1e270 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1e280 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1e290 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1e2a0 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1e2b0 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1e2c0 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1e2d0 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1e2e0 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1e2f0 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1e300 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1e310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
1e350 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
1e360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e370 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1e380 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1e390 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1e3a0 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1e3b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e3c0 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1e3d0 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1e3e0 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1e3f0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1e400 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1e410 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1e420 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1e430 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1e440 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e450 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1e460 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1e470 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1e480 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1e490 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1e4a0 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1e4b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1e4c0 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1e4d0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1e4e0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1e4f0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1e500 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1e510 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1e520 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1e530 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
1e540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e550 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
1e560 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
1e570 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
1e580 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
1e590 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
1e5a0 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
1e5b0 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
1e5c0 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
1e5d0 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1e5e0 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
1e5f0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
1e600 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
1e610 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
1e620 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
1e630 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
1e640 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1e650 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
1e660 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
1e670 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1e680 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e6a0 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
1e6b0 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1e6c0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
1e6d0 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
1e6e0 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
1e6f0 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
1e700 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
1e710 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
1e720 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
1e730 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
1e740 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
1e750 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
1e760 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
1e770 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
1e780 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
1e790 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
1e7a0 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
1e7b0 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
1e7c0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
1e7d0 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
1e7e0 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
1e7f0 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
1e800 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1e810 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
1e820 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
1e830 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
1e840 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
1e850 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1e860 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1e870 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1e880 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
1e890 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
1e8a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1e8b0 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1e8c0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
1e8d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1e8e0 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1e8f0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1e900 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1e910 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1e920 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1e930 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1e940 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1e950 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1e960 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1e970 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1e980 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1e990 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1e9a0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1e9b0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1e9c0 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1e9d0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1e9e0 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1e9f0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1ea00 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1ea10 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1ea20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1ea30 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1ea40 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1ea50 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
1ea60 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
1ea70 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
1ea80 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
1ea90 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
1eaa0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
1eab0 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
1eac0 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
1ead0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1eae0 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
1eaf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1eb00 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
1eb10 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1eb20 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
1eb30 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1eb40 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
1eb50 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
1eb60 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1eb70 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1eb80 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1eb90 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
1eba0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
1ebb0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
1ebc0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
1ebd0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
1ebe0 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
1ebf0 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
1ec00 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
1ec10 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
1ec20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1ec30 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
1ec40 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
1ec50 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
1ec60 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ec80 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
1ec90 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
1eca0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
1ecb0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
1ecc0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
1ecd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ece0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1ecf0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
1ed00 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
1ed10 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
1ed20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
1ed50 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
1ed60 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
1ed70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1ed80 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
1ed90 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1eda0 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
1edb0 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
1edc0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1edd0 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
1ede0 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  02    /* Set to 
1edf0 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
1ee00 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1ee10 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
1ee20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
1ee30 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
1ee40 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
1ee50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ee60 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
1ee70 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
1ee80 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
1ee90 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
1eea0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
1eeb0 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
1eec0 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
1eed0 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
1eee0 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
1eef0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
1ef00 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
1ef10 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1ef20 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
1ef30 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
1ef40 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
1ef50 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
1ef60 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1ef70 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
1ef80 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1ef90 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
1efa0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1efb0 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
1efc0 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
1efd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1efe0 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20  G_SEEKEQ        
1eff0 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x02    /* OP_Op
1f000 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73  en** cursor uses
1f010 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f   EQ seek only */
1f020 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1f030 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78  FORDELETE     0x
1f040 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  08    /* OP_Open
1f050 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45   should use BTRE
1f060 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23  E_FORDELETE */.#
1f070 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
1f080 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30  ISREG       0x10
1f090 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
1f0a0 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
1f0b0 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
1f0c0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
1f0d0 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
1f0e0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
1f0f0 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
1f100 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  tation */.#defin
1f110 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  e OPFLAG_SAVEPOS
1f120 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f  ITION  0x02    /
1f130 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65 65  * OP_Delete: kee
1f140 70 20 63 75 72 73 6f 72 20 70 6f 73 69 74 69 6f  p cursor positio
1f150 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
1f160 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
1f170 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
1f180 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
1f190 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
1f1a0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1f1b0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1f1c0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1f1d0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1f1e0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1f1f0 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1f200 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73  .. *. * Pointers
1f210 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
1f220 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
1f230 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
1f240 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
1f250 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
1f260 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
1f270 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
1f280 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
1f290 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62   the. *    datab
1f2a0 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
1f2b0 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
1f2c0 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
1f2d0 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
1f2e0 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
1f2f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1f300 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
1f310 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
1f320 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
1f330 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
1f340 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1f350 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
1f360 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1f370 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
1f380 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
1f390 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
1f3a0 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
1f3b0 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
1f3c0 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
1f3d0 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
1f3e0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1f3f0 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
1f400 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1f410 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
1f420 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
1f430 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1f440 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1f450 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1f460 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
1f470 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
1f480 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1f490 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
1f4a0 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
1f4d0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
1f4e0 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
1f4f0 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
1f500 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
1f510 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f530 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1f540 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1f550 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
1f560 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f580 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
1f590 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
1f5a0 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
1f5b0 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
1f5c0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
1f5d0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
1f5e0 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
1f5f0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
1f600 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
1f610 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
1f620 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
1f630 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
1f640 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
1f670 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
1f680 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
1f690 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
1f6a0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1f6b0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
1f6c0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
1f6d0 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
1f6e0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1f6f0 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
1f700 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1f710 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
1f720 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
1f730 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
1f740 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1f750 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
1f760 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1f770 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
1f780 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
1f790 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
1f7a0 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
1f7b0 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
1f7c0 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
1f7d0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1f7e0 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1f7f0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a  termine which..*
1f800 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
1f810 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
1f820 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
1f830 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
1f840 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
1f850 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
1f860 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
1f870 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
1f880 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
1f890 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
1f8a0 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
1f8b0 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
1f8c0 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
1f8d0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
1f8e0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
1f8f0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
1f900 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
1f910 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
1f920 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
1f930 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
1f940 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1f950 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1f960 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1f970 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1f980 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1f990 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1f9a0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1f9b0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1f9c0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1f9d0 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  the. * associate
1f9e0 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
1f9f0 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
1fa00 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1fa10 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1fa20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
1fa30 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
1fa40 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
1fa50 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
1fa60 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
1fa70 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
1fa80 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
1fa90 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
1faa0 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
1fab0 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
1fac0 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
1fad0 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
1fae0 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20  mined by the. * 
1faf0 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
1fb00 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
1fb10 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
1fb20 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
1fb30 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
1fb40 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
1fb50 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
1fb60 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1fb70 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1fb80 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
1fb90 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1fbb0 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
1fbc0 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
1fbd0 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
1fbe0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54  wise NULL.. * zT
1fbf0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
1fc00 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1fc10 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
1fc20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
1fc30 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
1fc40 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1fc50 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
1fc60 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1fc70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1fc80 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
1fc90 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
1fca0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1fcb0 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
1fcc0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1fcd0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1fce0 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
1fcf0 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20   VALUES .... *  
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1fd10 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
1fd20 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
1fd30 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
1fd40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
1fd50 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
1fd60 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
1fd70 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
1fd80 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
1fd90 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1fda0 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1fdb0 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1fdc0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1fdd0 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1fde0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1fdf0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1fe00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1fe10 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1fe20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55  *. * (op == TK_U
1fe30 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
1fe40 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
1fe50 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1fe60 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
1fe70 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1fe80 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1fe90 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1fea0 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1feb0 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1fec0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1fed0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
1fee0 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
1fef0 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
1ff00 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
1ff10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
1ff20 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
1ff30 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
1ff40 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
1ff50 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
1ff60 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
1ff70 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
1ff80 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20    argument.. *. 
1ff90 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1ffa0 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ffc0 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1ffd0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1ffe0 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
1fff0 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
20000 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
20010 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
20020 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
20030 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
20040 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
20050 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
20060 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
20070 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
20080 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
20090 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
200a0 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
200b0 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
200c0 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
200d0 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
200e0 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
200f0 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
20100 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
20110 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
20120 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
20130 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
20140 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
20150 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
20160 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
20170 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c  UPDATE. */.  IdL
20180 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
20190 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
201a0 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
201b0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
201c0 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
201d0 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
201e0 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
201f0 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
20200 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
20210 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
20220 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
20230 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
20240 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
20250 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
20260 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
20270 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
20280 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
20290 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
202a0 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
202b0 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
202c0 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
202d0 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
202e0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
202f0 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
20300 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
20310 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
20320 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
20330 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
20340 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
20350 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
20360 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
20370 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
20380 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
20390 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
203a0 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
203b0 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
203c0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
203d0 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
203e0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
203f0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
20400 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
20410 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
20420 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
20430 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
20440 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
20450 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
20460 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
20470 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
20480 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
20490 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
204a0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
204b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
204c0 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
204d0 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
204e0 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
204f0 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
20500 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
20510 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
20520 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
20530 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
20540 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
20550 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
20560 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
20570 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
20580 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
20590 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
205a0 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
205b0 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
205c0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
205d0 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
205e0 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
205f0 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
20600 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
20610 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  far */.  u32  nC
20620 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
20630 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
20640 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
20650 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
20660 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
20670 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
20680 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
20690 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
206a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
206b0 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
206c0 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
206d0 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
206e0 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
206f0 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43         /* STRACC
20700 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41  UM_NOMEM or STRA
20710 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20  CCUM_TOOBIG */. 
20720 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67   u8   printfFlag
20730 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  s;    /* SQLITE_
20740 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c  PRINTF flags bel
20750 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65  ow */.};.#define
20760 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
20770 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41    1.#define STRA
20780 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23  CCUM_TOOBIG  2.#
20790 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
207a0 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
207b0 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
207c0 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
207d0 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
207e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
207f0 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
20800 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
20810 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
20820 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
20830 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
20840 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
20850 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
20860 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
20870 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
20880 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
20890 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
208a0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
208b0 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
208c0 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
208d0 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
208e0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
208f0 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
20900 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
20910 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
20920 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
20930 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
20940 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
20950 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
20960 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
20970 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
20980 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
20990 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
209a0 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
209b0 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
209c0 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
209d0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
209e0 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
209f0 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
20a00 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
20a10 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
20a20 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
20a30 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
20a40 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
20a50 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
20a60 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
20a70 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
20a80 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
20a90 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
20aa0 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
20ab0 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
20ac0 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
20ad0 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
20ae0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
20af0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
20b00 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
20b10 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
20b20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20b30 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
20b40 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
20b50 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b70 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
20b80 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
20b90 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
20ba0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
20bb0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
20bc0 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
20bd0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
20be0 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20c00 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
20c10 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
20c20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
20c30 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
20c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
20c50 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
20c60 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
20c70 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ns */.  int mxSt
20c80 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
20c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
20ca0 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
20cb0 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
20cc0 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
20cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
20ce0 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
20cf0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
20d00 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
20d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20d20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
20d30 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
20d40 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
20d50 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
20d60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
20d70 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
20d80 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
20d90 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
20da0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20db0 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
20dc0 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
20dd0 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
20de0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
20df0 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
20e00 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
20e10 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
20e20 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
20e30 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
20e40 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
20e50 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
20e60 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
20e70 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
20e80 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
20e90 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
20ea0 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
20eb0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
20ec0 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
20ef0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
20f00 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20f20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
20f30 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
20f40 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
20f50 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
20f60 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
20f70 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
20f80 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
20f90 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
20fa0 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
20fb0 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
20fc0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
20fd0 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
20fe0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
20ff0 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
21000 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
21010 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
21020 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
21030 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
21040 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21060 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
21070 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
21080 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
21090 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
210a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
210b0 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
210c0 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
210d0 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
210e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
210f0 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
21100 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
21110 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21120 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
21130 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
21140 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
21150 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21170 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
21180 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
21190 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
211a0 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
211b0 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
211c0 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
211d0 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
211e0 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
211f0 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
21200 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
21210 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
21220 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a  bled */.  u32 sz
21230 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  Pma;            
21240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
21250 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d  aximum Sorter PM
21260 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54  A size */.  /* T
21270 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
21280 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
21290 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
212a0 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
212b0 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
212c0 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
212d0 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
212e0 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
212f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21300 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
21310 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
21320 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
21330 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
21340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21350 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
21360 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
21370 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
21380 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213a0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
213b0 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
213c0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
213d0 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
213f0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
21400 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
21410 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
21420 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
21430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21440 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
21450 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
21460 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
21470 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
21480 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21490 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
214a0 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74  Mutex */.  sqlit
214b0 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
214c0 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
214d0 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
214e0 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
214f0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
21500 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
21510 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
21520 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
21530 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
21540 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21560 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
21570 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69   to xLog() */.#i
21580 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
21590 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
215a0 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
215b0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
215c0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
215d0 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
215e0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
215f0 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52  QLITE_VDBE_COVER
21600 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  AGE.  /* The fol
21610 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  lowing callback 
21620 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73  (if not NULL) is
21630 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72   invoked on ever
21640 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20  y VDBE branch.  
21650 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53  ** operation.  S
21660 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  et the callback 
21670 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
21680 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
21690 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64  AGE..  */.  void
216a0 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28   (*xVdbeBranch)(
216b0 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69  void*,int iSrcLi
216c0 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
216d0 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
216e0 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
216f0 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
21730 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
21740 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
21750 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e  UILTIN_TEST.  in
21760 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
21770 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
21780 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
21790 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
217a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
217b0 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
217d0 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
217e0 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
217f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
21800 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
21810 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
21820 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
21830 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
21840 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
21850 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
21860 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
21870 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
21880 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
21890 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
218a0 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
218b0 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
218c0 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
218d0 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
218e0 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
218f0 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
21900 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
21910 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
21920 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
21930 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
21940 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
21950 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
21960 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
21970 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
21980 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
21990 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
219a0 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
219b0 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
219c0 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
219d0 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
219e0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
219f0 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
21a00 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
21a10 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
21a20 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
21a30 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
21a40 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
21a50 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
21a60 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
21a70 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
21a80 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
21a90 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
21aa0 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
21ab0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
21ac0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21ae0 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
21af0 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45  .  */.  int (*xE
21b00 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
21b10 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
21b20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
21b30 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
21b40 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
21b50 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
21b60 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
21b70 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
21b80 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
21b90 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
21ba0 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
21bb0 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
21bc0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
21bd0 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  Ts */.  int walk
21be0 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
21c10 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
21c20 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
21c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
21c50 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
21c60 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c90 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
21ca0 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
21cb0 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
21cc0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ce0 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
21cf0 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72      /* A counter
21d30 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72   */.    int iCur
21d40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d60 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
21d70 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
21d80 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21da0 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
21db0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
21dc0 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
21dd0 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
21de0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
21df0 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
21e00 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74  rences */.    st
21e10 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70  ruct CCurHint *p
21e20 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20  CCurHint;       
21e30 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
21e40 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69   by codeCursorHi
21e50 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nt() */.    int 
21e60 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  *aiCol;         
21e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e80 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
21e90 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
21ea0 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  s */.  } u;.};..
21eb0 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
21ec0 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
21ed0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
21ee0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
21ef0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
21f00 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
21f10 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
21f20 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
21f30 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
21f40 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
21f50 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
21f60 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
21f70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
21f80 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
21f90 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
21fa0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
21fb0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
21fc0 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20   Expr*);../*.** 
21fd0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
21fe0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
21ff0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
22000 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
22010 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
22020 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
22030 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
22040 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
22050 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
22060 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
22070 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
22080 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
22090 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
220a0 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
220b0 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
220c0 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
220d0 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
220e0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
220f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
22100 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
22110 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
22120 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
22130 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22140 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
22150 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
22160 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
22170 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
22180 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
221a0 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
221b0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
221c0 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
221d0 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
221e0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
221f0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
22200 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
22210 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
22240 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
22250 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
22260 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22280 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
22290 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
222a0 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
222b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
222c0 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
222d0 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
222e0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
222f0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
22300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22310 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
22320 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
22330 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
22340 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
22350 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
22360 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
22370 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
22380 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
22390 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
223a0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
223b0 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
223c0 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
223d0 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
223e0 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
223f0 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
22400 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
22410 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
22420 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
22430 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
22440 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
22450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
22460 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
22470 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
22480 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
22490 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
224a0 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
224b0 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
224c0 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
224d0 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
224e0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
224f0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
22500 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
22510 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
22520 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
22530 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
22540 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
22550 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
22560 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
22570 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
22580 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
22590 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
225c0 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
225d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225e0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
225f0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
22600 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
22610 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
22620 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
22660 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
22670 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
22680 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
22690 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
226a0 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
226b0 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
226c0 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
226d0 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
226e0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
226f0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
22700 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
22710 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
22720 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
22730 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
22740 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
22750 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
22760 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
22770 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
22780 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
22790 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
227a0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
227b0 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
227c0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
227d0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
227e0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
227f0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
22800 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
22810 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
22820 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
22830 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
22840 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
22850 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
22860 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
22870 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
22880 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
22890 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
228a0 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
228b0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
228c0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
228d0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
228e0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
228f0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65  Error(int);.# de
22900 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
22910 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f  M_BKPT sqlite3No
22920 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
22930 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
22940 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
22950 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72  KPT sqlite3Ioerr
22960 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  nomemError(__LIN
22970 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  E__).#else.# def
22980 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
22990 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
229a0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
229b0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
229c0 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
229d0 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f  _NOMEM.#endif../
229e0 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
229f0 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
22a00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
22a10 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
22a20 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22a30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
22a40 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
22a50 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
22a60 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
22a70 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
22a80 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
22a90 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
22aa0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
22ab0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
22ac0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
22ad0 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
22ae0 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
22af0 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
22b00 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
22b10 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
22b20 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
22b30 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
22b40 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
22b50 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
22b60 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22b70 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
22b80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22b90 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
22ba0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
22bb0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
22bc0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
22bd0 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
22be0 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
22bf0 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
22c00 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
22c10 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
22c20 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
22c30 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
22c40 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22c50 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
22c60 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
22c70 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
22c80 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
22c90 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
22ca0 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
22cb0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
22cc0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
22cd0 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
22ce0 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
22cf0 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
22d00 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
22d10 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
22d20 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
22d30 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
22d40 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
22d50 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
22d60 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
22d70 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
22d80 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
22d90 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
22da0 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
22db0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
22dc0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
22dd0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
22de0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
22df0 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
22e00 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
22e10 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
22e20 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
22e30 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
22e40 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
22e50 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
22e60 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
22e70 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
22e80 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
22e90 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
22ea0 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
22eb0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
22ec0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
22ed0 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
22ee0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
22ef0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
22f00 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
22f10 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
22f20 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
22f30 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
22f40 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
22f50 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
22f60 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
22f70 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
22f80 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
22f90 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
22fa0 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65  char)(x)]).#else
22fb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22fc0 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
22fd0 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
22fe0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
22ff0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
23000 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
23010 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23020 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
23030 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
23040 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
23050 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
23060 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
23070 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
23080 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
23090 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
230a0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
230b0 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
230c0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
230d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
230e0 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
230f0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
23100 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
23110 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
23120 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
23130 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
23140 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
23150 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
23160 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
23170 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43  int sqlite3IsIdC
23180 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a  har(u8);.#endif.
23190 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
231a0 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
231b0 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
231c0 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
231d0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
231e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
231f0 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
23200 61 72 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  ar*);.const char
23210 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 65 78 74   *sqlite3StrNext
23220 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
23230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
23240 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
23250 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
23260 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
23270 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
23280 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
23290 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
232a0 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
232b0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
232c0 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
232d0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
232e0 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
232f0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
23300 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
23310 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
23320 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
23330 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33  locRawNN(sqlite3
23340 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
23350 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
23360 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23370 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
23380 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
23390 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
233a0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
233b0 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
233c0 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
233d0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
233e0 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
233f0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
23400 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
23410 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
23420 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
23430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
23440 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
23450 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
23460 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
23470 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
23480 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
23490 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
234a0 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
234b0 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
234c0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
234d0 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
234e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
234f0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
23500 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
23510 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
23520 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
23530 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
23540 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
23550 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64  UILTIN_TEST.void
23560 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
23570 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
23580 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
23590 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
235a0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
235b0 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
235c0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
235d0 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
235e0 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
235f0 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
23600 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
23610 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
23620 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
23630 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
23640 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
23650 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
23660 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
23670 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
23680 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
23690 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
236a0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
236b0 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
236c0 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
236d0 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
236e0 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
236f0 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
23700 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
23710 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
23720 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23730 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
23740 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
23750 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23760 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
23770 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
23780 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
23790 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
237a0 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73  ckFree(D,P).#els
237b0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
237c0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
237d0 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
237e0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
237f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
23800 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
23810 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
23820 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
23830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
23840 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
23850 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
23860 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
23870 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
23880 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
23890 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
238a0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
238b0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
238c0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
238d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
238e0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
238f0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
23900 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
23910 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
23920 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
23930 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
23940 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
23950 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
23960 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
23970 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
23980 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
23990 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
239a0 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
239b0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
239c0 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
239d0 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
239e0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
239f0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
23a00 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
23a10 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  d);.#endif.#if !
23a20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
23a30 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64  UTEX_OMIT) && !d
23a40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
23a50 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64  TEX_NOOP).  void
23a60 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61   sqlite3MemoryBa
23a70 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c  rrier(void);.#el
23a80 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
23a90 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
23aa0 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74  ().#endif..sqlit
23ab0 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
23ac0 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29  StatusValue(int)
23ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
23ae0 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29  atusUp(int, int)
23af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
23b00 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e  atusDown(int, in
23b10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23b20 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28  StatusHighwater(
23b30 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41  int, int);../* A
23b40 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73  ccess to mutexes
23b50 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
23b60 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c  _status() */.sql
23b70 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
23b80 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28  te3Pcache1Mutex(
23b90 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d  void);.sqlite3_m
23ba0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c  utex *sqlite3Mal
23bb0 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  locMutex(void);.
23bc0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23bd0 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
23be0 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
23bf0 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
23c00 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
23c10 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
23c20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
23c30 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
23c40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
23c50 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
23c60 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
23c70 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
23c80 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
23c90 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
23ca0 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
23cb0 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
23cc0 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
23cd0 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
23ce0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
23cf0 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
23d00 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
23d10 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23d30 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
23d40 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
23d50 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
23d60 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
23d70 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
23d80 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69  alues */.};..voi
23d90 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  d sqlite3VXPrint
23da0 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
23db0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
23dc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23dd0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
23de0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
23df0 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
23e00 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
23e10 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23e20 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
23e30 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
23e40 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
23e50 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
23e60 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
23e70 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
23e80 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
23e90 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73  _TRACE).  void s
23ea0 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
23eb0 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
23ec0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
23ed0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
23ee0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
23ef0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
23f00 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
23f10 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
23f20 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
23f30 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
23f40 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65  TreeViewExpr(Tre
23f50 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
23f60 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  pr*, u8);.  void
23f70 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
23f80 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
23f90 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
23fa0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
23fb0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
23fc0 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
23fd0 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
23fe0 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
23ff0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24000 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
24010 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
24020 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ith*, u8);.#endi
24030 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
24040 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
24050 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
24060 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
24070 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
24080 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
24090 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
240a0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
240b0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
240c0 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
240d0 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  n*,char*);.int s
240e0 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
240f0 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
24100 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
24110 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
24120 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
24130 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
24140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
24150 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
24160 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
24170 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
24180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24190 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
241a0 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
241b0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
241c0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
241d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
241e0 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
241f0 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
24200 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
24210 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
24220 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
24230 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
24240 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
24250 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
24260 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
24270 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
24280 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
24290 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
242a0 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
242b0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
242c0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
242d0 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
242e0 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
242f0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
24300 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24310 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
24320 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
24330 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
24340 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
24350 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
24360 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24370 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
24380 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
24390 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
243a0 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
243b0 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
243c0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
243d0 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
243e0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
243f0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
24400 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72  e3ExprListSetSor
24410 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a  tOrder(ExprList*
24420 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
24430 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
24440 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
24450 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
24460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24470 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
24480 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
24490 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
244a0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
244b0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
244c0 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
244d0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
244e0 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
244f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
24500 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
24510 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
24520 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
24530 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
24540 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
24550 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
24560 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24570 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
24580 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24590 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
245a0 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
245b0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
245c0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
245d0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
245e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
245f0 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
24600 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
24610 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
24620 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
24630 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
24640 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
24650 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
24660 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
24670 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
24680 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
24690 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
246a0 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20  olumn**);.Table 
246b0 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
246c0 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
246d0 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
246e0 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
246f0 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
24700 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
24710 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
24720 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
24730 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
24740 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
24750 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
24760 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
24770 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
24780 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
24790 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
247a0 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
247b0 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NS.  void sqlite
247c0 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
247d0 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
247e0 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73  , Column*);.#els
247f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24800 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
24810 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20  esFromName(T,C) 
24820 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
24830 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
24840 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
24850 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Token*,Token*);.
24860 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
24870 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
24880 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24890 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
248a0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
248b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
248c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
248d0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
248e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
248f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
24900 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
24910 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  se*,ExprSpan*);.
24920 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
24930 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
24940 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
24950 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
24960 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24970 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
24980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
24990 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
249a0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
249b0 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
249e0 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
249f0 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
24a00 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
24a10 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
24a20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24a30 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29  odeOnce(Parse *)
24a40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
24a50 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
24a60 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ST.# define sqli
24a70 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
24a80 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
24a90 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
24aa0 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
24ab0 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
24ac0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
24ad0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
24ae0 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
24af0 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
24b00 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
24b10 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
24b20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
24b30 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
24b40 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
24b50 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
24b60 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
24b70 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
24b80 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
24b90 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
24ba0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
24bb0 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
24bc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24bd0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74  BUILTIN_TEST.int
24be0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
24bf0 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
24c00 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
24c10 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
24c20 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
24c30 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
24c40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24c50 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
24c60 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
24c70 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
24c80 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
24c90 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
24ca0 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
24cb0 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
24cc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
24cd0 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
24ce0 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
24cf0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
24d00 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
24d10 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
24d20 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
24d30 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
24d40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
24d50 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
24d60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
24d70 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
24d80 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
24d90 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
24da0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
24db0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24dc0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
24dd0 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
24de0 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
24df0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
24e00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
24e10 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
24e20 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
24e30 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
24e40 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
24e50 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
24e60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
24e70 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
24e80 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
24e90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24ea0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
24eb0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
24ec0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24ed0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
24ee0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
24ef0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
24f00 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
24f10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24f20 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
24f30 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
24f40 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
24f50 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
24f60 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
24f70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
24f80 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
24f90 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
24fa0 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
24fb0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
24fc0 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
24fd0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
24fe0 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
24ff0 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
25000 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
25010 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
25020 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
25030 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
25040 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
25050 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
25060 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
25070 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
25080 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
25090 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
250a0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
250b0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
250c0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
250d0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
250e0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
250f0 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
25100 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
25110 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
25120 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
25130 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
25170 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
25180 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
25190 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
251a0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
251b0 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
251c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
251d0 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
251e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
251f0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25200 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
25210 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
25220 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
25230 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
25240 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
25250 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
25260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25270 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
25280 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
25290 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
252a0 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
252b0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
252c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
252d0 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
252e0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
252f0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
25300 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
25310 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
25320 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
25330 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
25340 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
25350 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
25360 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
25370 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
253a0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
253b0 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
253c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
253d0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
253e0 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
253f0 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
25400 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
25410 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
25420 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
25430 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
25440 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
25470 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45  ist*,u32,Expr*,E
25480 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
25490 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
254a0 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
254b0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
254c0 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
254d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
254e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
254f0 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
25500 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
25510 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
25520 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
25530 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
25540 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
25550 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
25560 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
25570 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
25580 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25590 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
255a0 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
255b0 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
255c0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
255d0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
255e0 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
255f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
25600 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
25610 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
25620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
25630 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
25640 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
25650 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
25660 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
25670 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
25680 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
25690 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
256a0 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
256b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
256c0 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
256d0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
256e0 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
256f0 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
25700 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
25710 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
25720 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
25730 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
25740 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
25750 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
25760 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
25770 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
25780 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
25790 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
257a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
257b0 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
257c0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
257d0 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
257e0 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
257f0 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
25800 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
25810 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
25820 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
25830 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
25840 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
25850 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
25860 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
25870 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
25880 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
25890 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
258a0 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
258b0 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
258c0 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
258d0 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
258e0 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
258f0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
25900 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
25910 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25920 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
25930 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
25940 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
25950 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
25960 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
25970 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65  olumnToReg(Parse
25980 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
25990 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
259a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
259b0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
259c0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
259d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
259e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
259f0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
25a00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25a10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25a20 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
25a30 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25a40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25a50 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
25a60 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25a70 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
25a80 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
25a90 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
25aa0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
25ab0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25ac0 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
25ad0 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
25ae0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
25af0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
25b00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
25b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25b20 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
25b30 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
25b40 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
25b50 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
25b60 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
25b70 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
25b80 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
25b90 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
25ba0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
25bb0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
25bc0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
25bd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25be0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
25bf0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
25c00 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
25c10 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
25c20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
25c30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
25c40 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
25c50 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
25c60 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25c70 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
25c80 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
25c90 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
25ca0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
25cb0 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
25cc0 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
25cd0 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
25ce0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
25cf0 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
25d00 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
25d10 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
25d20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
25d30 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
25d40 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
25d50 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
25d60 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
25d70 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
25d80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
25d90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25da0 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
25db0 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
25dc0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25dd0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
25de0 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
25df0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
25e00 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
25e10 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
25e20 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
25e30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
25e40 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
25e50 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
25e60 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
25e70 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25e80 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
25e90 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
25ea0 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
25eb0 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
25ec0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
25ed0 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
25ee0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
25ef0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
25f00 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
25f10 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
25f20 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
25f30 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
25f40 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25f50 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
25f60 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
25f70 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
25f80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
25f90 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
25fa0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
25fb0 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
25fc0 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
25fd0 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
25fe0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
25ff0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26000 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
26010 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
26020 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
26030 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
26040 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
26050 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26060 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
26070 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
26080 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26090 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
260a0 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
260b0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
260c0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
260d0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
260e0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
260f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
26100 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
26110 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
26120 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
26130 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
26140 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
26150 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
26160 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  EST.void sqlite3
26170 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
26180 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
26190 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
261a0 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  e(void);.#endif.
261b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
261c0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
261d0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
261e0 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
261f0 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
26200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26210 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
26220 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
26230 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
26240 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
26250 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
26260 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26270 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
26280 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
26290 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
262a0 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
262b0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
262c0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
262d0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
262e0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
262f0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
26300 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
26310 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
26320 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
26330 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
26340 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
26350 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
26360 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
26370 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
26380 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
26390 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
263a0 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
263b0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
263c0 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
263d0 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
263e0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
263f0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
26400 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
26410 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
26420 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
26430 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
26440 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
26450 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
26460 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
26470 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
26480 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26490 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
264a0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
264b0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
264c0 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
264d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
264e0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
264f0 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
26500 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
26510 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
26520 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
26530 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26540 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
26550 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
26560 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
26570 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
26580 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
26590 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
265a0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
265b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
265c0 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
265d0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
265e0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
265f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
26600 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
26610 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
26620 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
26630 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
26640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
26670 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  int*,int*);.void
26680 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
26690 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
266a0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
266b0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
266c0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
266d0 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
266e0 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
266f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69  ble*, int, u8, i
26700 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
26710 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
26720 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
26730 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
26740 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26750 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
26760 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
26770 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
26780 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26790 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
267a0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
267b0 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
267c0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
267d0 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
267e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
267f0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
26800 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
26810 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
26820 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
26830 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
26840 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
26850 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
26860 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
26870 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
26880 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
26890 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
268a0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
268b0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
268c0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
268d0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
268e0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
268f0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
26900 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
26910 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45  *,int);.#if SELE
26920 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
26930 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26940 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74  ctSetName(Select
26950 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
26960 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26970 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
26980 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  ame(A,B).#endif.
26990 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
269a0 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46  rtBuiltinFuncs(F
269b0 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75  uncDef*,int);.Fu
269c0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
269d0 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
269e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
269f0 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
26a00 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
26a10 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
26a20 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
26a30 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
26a40 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
26a50 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
26a60 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e  3RegisterPerConn
26a70 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e  ectionBuiltinFun
26a80 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
26a90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
26aa0 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74  etyCheckOk(sqlit
26ab0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
26ac0 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b  3SafetyCheckSick
26ad0 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  OrOk(sqlite3*);.
26ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e  void sqlite3Chan
26af0 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c  geCookie(Parse*,
26b00 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66   int);..#if !def
26b10 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26b20 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e  _VIEW) && !defin
26b30 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
26b40 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c  RIGGER).void sql
26b50 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56  ite3MaterializeV
26b60 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  iew(Parse*, Tabl
26b70 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
26b80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
26b90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
26ba0 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69  GGER.  void sqli
26bb0 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28  te3BeginTrigger(
26bc0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54  Parse*, Token*,T
26bd0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64  oken*,int,int,Id
26be0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a  List*,SrcList*,.
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
26c10 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ,int, int);.  vo
26c20 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
26c30 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
26c40 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f  TriggerStep*, To
26c50 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ken*);.  void sq
26c60 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
26c70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26c80 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
26c90 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
26ca0 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72  erPtr(Parse*, Tr
26cb0 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67  igger*);.  Trigg
26cc0 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
26cd0 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a  ersExist(Parse *
26ce0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45  , Table*, int, E
26cf0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70  xprList*, int *p
26d00 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72  Mask);.  Trigger
26d10 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
26d20 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  List(Parse *, Ta
26d30 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  ble *);.  void s
26d40 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
26d50 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
26d60 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70  gger *, int, Exp
26d70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62  rList*, int, Tab
26d80 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  le *,.          
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29    int, int, int)
26db0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26dc0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
26dd0 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72  rect(Parse *, Tr
26de0 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a  igger *, Table *
26df0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
26e00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56  ;.  void sqliteV
26e10 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
26e20 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
26e30 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
26e40 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26e50 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53  e3DeleteTriggerS
26e60 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  tep(sqlite3*, Tr
26e70 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54  iggerStep*);.  T
26e80 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
26e90 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74  te3TriggerSelect
26ea0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  Step(sqlite3*,Se
26eb0 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65  lect*);.  Trigge
26ec0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
26ed0 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
26ee0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
26ef0 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20    Select*,u8);. 
26f30 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
26f40 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
26f50 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
26f60 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
26f70 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  , Expr*, u8);.  
26f80 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
26f90 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
26fa0 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
26fb0 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20  oken*, Expr*);. 
26fc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
26fd0 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
26fe0 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
26ff0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
27000 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
27010 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
27020 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
27030 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
27040 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
27050 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
27060 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
27070 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
27080 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
27090 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
270a0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
270b0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
270c0 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  p)).# define sql
270d0 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
270e0 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
270f0 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  l==0).#else.# de
27100 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
27110 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
27120 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
27130 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
27140 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
27150 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
27160 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
27170 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
27180 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
27190 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
271a0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
271b0 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
271c0 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
271d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
271e0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
271f0 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
27200 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27210 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
27220 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
27230 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
27240 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
27250 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
27260 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20  l(p) 1.# define 
27270 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
27280 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
27290 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
272a0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
272b0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
272c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
272d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
272e0 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
272f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27300 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
27310 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
27320 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
27330 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
27340 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
27350 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
27360 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
27370 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
27380 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
27390 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
273a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
273b0 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
273c0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
273d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
273e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
273f0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
27400 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
27410 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
27420 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
27430 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
27440 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
27450 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
27460 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
27470 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
27480 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
27490 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
274a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
274b0 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
274c0 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
274d0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
274e0 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
274f0 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
27500 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
27510 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
27520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
27530 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
27540 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
27550 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
27560 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
27570 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
27580 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27590 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
275a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
275b0 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
275c0 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
275d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
275e0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
275f0 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
27600 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
27610 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
27620 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
27630 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
27640 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
27650 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
27660 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
27670 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
27680 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
27690 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
276a0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
276b0 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
276c0 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
276d0 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
276e0 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
276f0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
27700 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
27710 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
27720 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
27730 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
27740 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
27750 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
27760 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
27770 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
27780 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
27790 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
277a0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
277b0 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
277c0 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
277d0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
277e0 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
277f0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
27800 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
27810 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27820 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27830 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
27840 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
27850 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
27860 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27870 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
27880 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
27890 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
278a0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
278b0 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
278c0 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
278d0 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
278e0 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
278f0 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
27900 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
27910 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  f../*.** Routine
27920 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
27930 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
27940 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
27950 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
27960 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
27970 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
27980 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
27990 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
279a0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
279b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
279c0 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
279d0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
279e0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
279f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
27a00 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
27a10 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
27a20 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
27a30 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
27a40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
27a50 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
27a60 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
27a70 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
27a80 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
27a90 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
27aa0 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
27ab0 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
27ac0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
27ad0 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
27ae0 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
27af0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
27b00 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
27b10 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
27b20 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
27b30 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
27b40 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
27b50 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
27b60 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
27b70 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
27b80 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
27b90 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
27ba0 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
27bb0 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
27bc0 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
27bd0 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
27be0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
27bf0 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
27c00 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
27c10 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
27c20 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
27c30 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
27c40 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
27c50 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
27c60 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
27c70 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
27c80 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
27c90 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
27ca0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
27cb0 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
27cc0 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
27cd0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
27ce0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
27cf0 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
27d00 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
27d10 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
27d20 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
27d30 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
27d40 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
27d50 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
27d60 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
27d70 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
27d80 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
27d90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
27da0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27db0 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
27dc0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
27dd0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
27de0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
27df0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
27e00 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
27e10 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
27e20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
27e30 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
27e40 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
27e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
27e60 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
27e70 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
27e80 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
27e90 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27ea0 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
27eb0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
27ec0 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
27ed0 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
27ee0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
27ef0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
27f00 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
27f10 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
27f20 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
27f30 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
27f40 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
27f50 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
27f60 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
27f70 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
27f80 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
27f90 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
27fa0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
27fb0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
27fc0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
27fd0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
27fe0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
27ff0 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
28000 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
28010 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
28020 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
28030 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
28040 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
28050 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28060 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
28070 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
28080 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28090 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
280a0 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
280b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
280c0 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
280d0 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
280e0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
280f0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
28100 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
28110 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
28120 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
28130 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
28140 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
28150 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
28160 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
28170 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
28180 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
28190 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
281a0 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
281b0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
281c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
281d0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
281e0 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
281f0 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
28200 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
28210 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
28220 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
28230 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
28240 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
28250 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
28260 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
28270 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
28280 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
28290 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
282a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
282b0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
282c0 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
282e0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
282f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
28300 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
28310 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
28320 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
28330 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
28340 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
28350 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
28360 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20  qlite3 *);.char 
28370 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
28380 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
28390 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
283a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
283b0 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
283c0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
283d0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
283e0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
283f0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
28400 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
28410 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
28420 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28430 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
28440 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
28450 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
28460 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
28470 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
28480 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42  char sqlite3StrB
28490 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20  INARY[];.extern 
284a0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
284b0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
284c0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
284d0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
284e0 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
284f0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
28500 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
28510 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
28520 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
28530 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
28540 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
28550 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e  nfig;.extern Fun
28560 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33  cDefHash sqlite3
28570 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
28580 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28590 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e  _OMIT_WSD.extern
285a0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
285b0 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
285c0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
285d0 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
285e0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
285f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28600 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
28610 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
28620 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
28630 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
28640 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
28650 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
28660 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
28670 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
28680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
28690 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
286a0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
286b0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
286c0 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
286d0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
286e0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
286f0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
28700 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
28710 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
28720 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
28730 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
28740 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28750 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
28760 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
28770 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
28780 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28790 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65  SelectWrongNumTe
287a0 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a  rmsError(Parse *
287b0 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a  pParse, Select *
287c0 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  p);.int sqlite3M
287d0 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
287e0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
287f0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
28800 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
28810 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
28820 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
28830 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
28840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
28850 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61  esolveExprListNa
28860 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
28870 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f  , ExprList*);.vo
28880 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
28890 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
288a0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
288b0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
288c0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
288d0 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
288e0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
288f0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
28900 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
28910 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
28920 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
28930 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
28940 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28950 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
28960 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
28970 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
28980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
28990 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
289a0 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
289b0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
289c0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
289d0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
289e0 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
289f0 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
28a00 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
28a10 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
28a20 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
28a30 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
28a40 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
28a50 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
28a60 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
28a70 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
28a80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
28a90 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
28aa0 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
28ab0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
28ac0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
28ad0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
28ae0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
28af0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
28b00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
28b10 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
28b20 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
28b30 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
28b40 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
28b50 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
28b60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
28b70 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
28b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28b90 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
28ba0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
28bb0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28bc0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
28bd0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
28be0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
28bf0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
28c00 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
28c10 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
28c20 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
28c30 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
28c40 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
28c50 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
28c60 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
28c70 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
28c80 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
28c90 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
28ca0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
28cb0 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
28cc0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
28cd0 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
28ce0 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
28cf0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
28d00 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
28d10 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
28d20 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
28d30 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
28d40 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
28d50 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
28d60 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
28d70 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
28d80 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
28d90 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
28da0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
28db0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
28dc0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
28dd0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
28de0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
28df0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
28e00 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
28e10 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
28e20 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
28e30 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69  estructor.);.voi
28e40 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c  d sqlite3OomFaul
28e50 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
28e60 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61  d sqlite3OomClea
28e70 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  r(sqlite3*);.int
28e80 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
28e90 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
28ea0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
28eb0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
28ec0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
28ed0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
28ee0 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71  it(StrAccum*, sq
28ef0 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69  lite3*, char*, i
28f00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28f10 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
28f20 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
28f30 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
28f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
28f50 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
28f60 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
28f70 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28f80 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74  te3AppendChar(St
28f90 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72  rAccum*,int,char
28fa0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28fb0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
28fc0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
28fd0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
28fe0 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
28ff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
29000 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
29010 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
29020 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
29030 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
29040 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
29050 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
29060 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
29070 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
29080 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
29090 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
290a0 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
290b0 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
290c0 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
290d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
290e0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
290f0 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
29100 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
29110 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
29120 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
29130 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78  lue(Parse*,Index
29140 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
29150 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c  **,Expr*,u8,int,
29160 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
29170 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
29180 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
29190 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
291a0 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
291b0 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
291c0 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
291d0 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
291e0 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
291f0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
29200 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
29210 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
29220 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
29230 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
29240 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
29250 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
29260 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
29270 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
29280 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  u64));.void sqli
29290 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
292a0 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
292b0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
292c0 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
292d0 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
292e0 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
292f0 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
29300 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
29310 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
29320 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
29330 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
29340 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
29350 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
29360 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
29370 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
29380 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
29390 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
293a0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
293b0 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
293c0 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
293d0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
293e0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
293f0 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
29400 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
29410 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
29420 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
29430 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
29440 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
29450 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
29460 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
29470 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
29480 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
29490 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
294a0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
294b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
294c0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
294d0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
294e0 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
294f0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
29500 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
29510 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
29520 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
29530 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
29540 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
29550 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
29560 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
29570 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
29580 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23  te3VtabLock(X).#
29590 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
295a0 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
295b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
295c0 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
295d0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
295e0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
295f0 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
29600 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
29610 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
29620 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
29630 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
29640 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
29650 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
29660 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
29670 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
29680 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
29690 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
296a0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
296b0 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
296c0 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73  Vdbe*);.   int s
296d0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
296e0 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
296f0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
29700 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
29710 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
29720 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
29730 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
29740 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
29750 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
29760 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
29770 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
29780 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
29790 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
297a0 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
297b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f  int, int);.   vo
297c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  id sqlite3VtabIm
297d0 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a  portErrmsg(Vdbe*
297e0 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
297f0 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c  ;.   VTable *sql
29800 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71  ite3GetVTable(sq
29810 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
29820 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
29830 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
29840 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
29850 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
29860 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e  ns==0).#endif.in
29870 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  t sqlite3VtabEpo
29880 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28  nymousTableInit(
29890 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  Parse*,Module*);
298a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
298b0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43  bEponymousTableC
298c0 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f  lear(sqlite3*,Mo
298d0 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
298e0 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
298f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
29900 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29910 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
29920 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
29930 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
29940 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29950 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
29960 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
29970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
29980 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
29990 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
299a0 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
299b0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
299c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
299d0 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
299e0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
299f0 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
29a00 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
29a10 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
29a20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
29a30 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
29a40 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
29a50 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
29a60 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
29a70 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
29a80 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
29a90 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
29aa0 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
29ab0 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
29ac0 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
29ad0 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
29ae0 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
29af0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
29b00 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
29b10 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
29b20 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
29b30 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
29b40 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
29b50 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
29b60 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
29b70 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
29b80 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
29b90 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
29ba0 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
29bb0 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
29bc0 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
29bd0 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
29be0 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
29bf0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
29c00 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
29c10 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
29c20 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
29c30 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
29c40 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
29c50 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
29c60 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
29c70 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
29c80 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
29c90 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
29ca0 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
29cb0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
29cc0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
29cd0 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
29ce0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
29cf0 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
29d00 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
29d10 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
29d20 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
29d30 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
29d40 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
29d50 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
29d60 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
29d70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29d80 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
29d90 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
29da0 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
29db0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
29dc0 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
29dd0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
29de0 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
29df0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
29e00 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
29e10 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
29e20 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
29e30 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
29e40 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
29e50 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
29e60 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
29e70 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
29e80 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
29e90 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
29ea0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
29eb0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
29ec0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
29ed0 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
29ee0 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
29ef0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
29f00 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
29f10 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
29f20 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
29f30 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
29f40 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
29f50 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
29f60 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
29f70 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
29f80 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
29f90 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
29fa0 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
29fb0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
29fc0 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  is.** provided (
29fd0 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
29fe0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
29ff0 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
2a000 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
2a010 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2a020 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
2a030 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
2a040 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a050 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
2a060 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
2a070 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2a080 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2a090 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2a0a0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2a0b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a0c0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
2a0d0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
2a0e0 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
2a0f0 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
2a100 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2a110 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2a120 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
2a130 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
2a140 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
2a150 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
2a160 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
2a170 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
2a180 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
2a190 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2a1a0 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
2a1b0 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
2a1c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2a1d0 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
2a1e0 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2a1f0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2a200 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
2a210 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
2a220 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
2a230 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
2a240 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2a250 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23  (a,b,c,d)    0.#
2a260 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
2a270 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2a280 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
2a290 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
2a2a0 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
2a2b0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2a2c0 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
2a2d0 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
2a2e0 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
2a2f0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2a300 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
2a310 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
2a320 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2a330 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
2a340 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
2a350 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
2a360 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
2a370 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
2a380 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
2a390 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2a3a0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
2a3b0 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
2a3c0 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
2a3d0 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
2a3e0 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
2a3f0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2a400 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
2a410 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
2a420 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
2a430 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
2a440 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
2a450 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
2a460 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
2a470 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
2a480 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
2a490 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
2a4a0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
2a4b0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2a4c0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2a4d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a4e0 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2a4f0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2a500 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2a510 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2a520 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2a530 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2a540 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2a550 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2a560 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2a570 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2a580 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2a590 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2a5a0 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2a5b0 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2a5c0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2a5d0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2a5e0 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2a5f0 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2a600 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2a610 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2a620 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2a630 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2a640 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2a650 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2a660 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2a670 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2a680 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2a690 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2a6a0 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2a6b0 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2a6c0 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2a6d0 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2a6e0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2a6f0 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2a700 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2a710 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2a720 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2a730 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2a740 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2a750 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2a760 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2a770 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2a780 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2a790 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2a7a0 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2a7b0 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2a7c0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2a7d0 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2a7e0 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2a7f0 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2a800 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2a810 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2a820 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2a830 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
2a840 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
2a850 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
2a860 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
2a870 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
2a880 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a890 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
2a8a0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64  te3_vfs *);.#ifd
2a8b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2a8c0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
2a8d0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2a8e0 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
2a8f0 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66  _file *);.#endif
2a900 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2a910 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73  rnalIsInMemory(s
2a920 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
2a930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
2a940 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
2a950 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
2a960 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
2a970 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
2a980 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2a990 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
2a9a0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
2a9b0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
2a9c0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
2a9d0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
2a9e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2a9f0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
2aa00 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
2aa10 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2aa20 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2aa30 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
2aa40 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2aa50 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
2aa60 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
2aa70 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
2aa80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aa90 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
2aaa0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
2aab0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
2aac0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
2aad0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2aae0 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
2aaf0 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
2ab00 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2ab10 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
2ab20 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2ab30 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2ab40 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
2ab50 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
2ab60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2ab70 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2ab80 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
2ab90 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2aba0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
2abb0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2abc0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2abd0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
2abe0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2abf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2ac00 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
2ac10 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
2ac20 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
2ac30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
2ac40 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
2ac50 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
2ac60 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
2ac70 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
2ac80 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
2ac90 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
2aca0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
2acb0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
2acc0 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
2acd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2ace0 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
2acf0 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
2ad00 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
2ad10 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
2ad20 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
2ad30 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2ad40 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
2ad50 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
2ad60 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
2ad70 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
2ad80 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
2ad90 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
2ada0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2adb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2adc0 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2add0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2ade0 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
2adf0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
2ae00 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
2ae10 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
2ae20 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
2ae30 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
2ae40 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2ae50 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
2ae60 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
2ae70 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
2ae80 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
2ae90 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
2aea0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2aeb0 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
2aec0 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
2aed0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
2aee0 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
2aef0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
2af00 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
2af10 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
2af20 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
2af30 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
2af40 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
2af50 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2af60 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2af70 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
2af80 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2af90 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2afa0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2afb0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2afc0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2afd0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
2afe0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2aff0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
2b000 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
2b010 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
2b020 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
2b030 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2b040 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
2b050 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
2b060 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2b070 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2b080 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2b090 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2b0a0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2b0b0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2b0c0 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
2b0d0 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
2b0e0 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
2b0f0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
2b100 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
2b110 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
2b120 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
2b130 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
2b140 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
2b150 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
2b160 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
2b170 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
2b180 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
2b190 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
2b1a0 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
2b1b0 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
2b1c0 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
2b1d0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
2b1e0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
2b1f0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
2b200 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2b210 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
2b220 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
2b230 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
2b240 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
2b250 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
2b260 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
2b270 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
2b280 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
2b290 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
2b2a0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2b2b0 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
2b2c0 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
2b2d0 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
2b2e0 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
2b2f0 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
2b300 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
2b310 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
2b320 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
2b330 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
2b340 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
2b350 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
2b360 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
2b370 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
2b380 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2b390 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
2b3a0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
2b3b0 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
2b3c0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
2b3d0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2b3e0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
2b3f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2b400 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2b410 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
2b420 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
2b430 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2b440 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
2b450 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2b460 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
2b470 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
2b480 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
2b490 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
2b4a0 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
2b4b0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
2b4c0 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
2b4d0 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
2b4e0 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
2b4f0 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
2b500 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
2b510 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
2b520 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
2b530 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
2b540 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2b550 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
2b560 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
2b570 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
2b580 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20  /*.** Threading 
2b590 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66  interface.*/.#if
2b5a0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
2b5b0 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74  ER_THREADS>0.int
2b5c0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72   sqlite3ThreadCr
2b5d0 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61  eate(SQLiteThrea
2b5e0 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69  d**,void*(*)(voi
2b5f0 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  d*),void*);.int 
2b600 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69  sqlite3ThreadJoi
2b610 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c  n(SQLiteThread*,
2b620 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66   void**);.#endif
2b630 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2b640 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
2b650 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
2b660 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
2b670 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
2b680 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
2b690 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65  e3*);.#endif..#e
2b6a0 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
2b6b0 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.