/ Hex Artifact Content
Login

Artifact 1a2f11f92cb3d76c011c04f87de3c0ebcc26230e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
19a0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
19b0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
19c0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
19d0: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
19e0: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
19f0: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
1a00: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
1a10: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a20: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
1a30: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
1a40: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
1a50: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
1a60: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
1a70: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
1a80: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
1a90: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
1aa0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
1ab0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
1ac0: 65 72 20 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  er S..*/.#if def
1ad0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1ae0: 5f 48 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  _H).# define SQL
1af0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
1b00: 29 20 5c 0a 20 20 20 20 28 28 75 69 6e 74 70 74  ) \.    ((uintpt
1b10: 72 5f 74 29 28 50 29 3e 3d 28 75 69 6e 74 70 74  r_t)(P)>=(uintpt
1b20: 72 5f 74 29 28 53 29 20 26 26 20 28 75 69 6e 74  r_t)(S) && (uint
1b30: 70 74 72 5f 74 29 28 50 29 3c 28 75 69 6e 74 70  ptr_t)(P)<(uintp
1b40: 74 72 5f 74 29 28 45 29 29 0a 23 65 6c 73 65 0a  tr_t)(E)).#else.
1b50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1b60: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
1b70: 50 29 3e 3d 28 53 29 20 26 26 20 28 50 29 3c 28  P)>=(S) && (P)<(
1b80: 45 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E)).#endif../*.*
1b90: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
1ba0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
1bb0: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
1bc0: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
1bd0: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
1be0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
1bf0: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
1c00: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
1c10: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
1c20: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
1c30: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1c40: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1c50: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
1c60: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1c70: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
1c80: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
1c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1ca0: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
1cb0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
1cc0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
1cd0: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
1ce0: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
1cf0: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
1d00: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
1d10: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
1d20: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
1d30: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
1d40: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1d50: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
1d60: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1d70: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
1d80: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
1d90: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
1da0: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
1db0: 31 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1300.#    if !de
1dc0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
1dd0: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
1de0: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
1df0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1e00: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
1e10: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
1e20: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
1e30: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
1e40: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
1e50: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
1e60: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
1e70: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
1e80: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
1e90: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
1ea0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
1eb0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
1ec0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
1ed0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1ee0: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
1ef0: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
1f00: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
1f10: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
1f20: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
1f30: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
1f40: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
1f50: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
1f60: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
1f70: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
1f80: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
1f90: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
1fa0: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
1fb0: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
1fc0: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
1fd0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
1fe0: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
1ff0: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2000: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2010: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2020: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
2030: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
2040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2050: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2060: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2070: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2080: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2090: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
20a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
20b0: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
20c0: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
20d0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
20e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
20f0: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2100: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2110: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
2120: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
2130: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
2140: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2150: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
2160: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2170: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2180: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2190: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
21a0: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
21b0: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
21c0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
21d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
21e0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
21f0: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2200: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
2210: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
2220: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
2230: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
2240: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
2250: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
2260: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2270: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2280: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2290: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
22a0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
22b0: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
22c0: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
22d0: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
22e0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
22f0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2300: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2310: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
2320: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
2330: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2340: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
2350: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
2360: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2370: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2380: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2390: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
23a0: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
23b0: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
23c0: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
23d0: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
23e0: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
23f0: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2400: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
2410: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
2420: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
2430: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
2440: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
2450: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
2460: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2470: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2480: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2490: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
24a0: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
24b0: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
24c0: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
24d0: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
24e0: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
24f0: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2500: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
2510: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
2520: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
2530: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
2540: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
2550: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
2560: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2570: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2580: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2590: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
25a0: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
25b0: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
25c0: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
25d0: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
25e0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
25f0: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2600: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2610: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2620: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2630: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2640: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2650: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2660: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2670: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2680: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2690: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
26a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
26b0: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
26c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26d0: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
26e0: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
26f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2700: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2710: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2720: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2730: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2740: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2750: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2760: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2770: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2790: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
27a0: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
27b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
27c0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
27d0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
27e0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
27f0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2800: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2810: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2820: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2830: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2840: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2850: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2860: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2870: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2880: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2890: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
28a0: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
28b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
28c0: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
28d0: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
28e0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28f0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2900: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2910: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2920: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2940: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2950: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2960: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2970: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2980: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2990: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
29a0: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
29b0: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
29c0: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
29d0: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
29e0: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
29f0: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2a00: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2a10: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2a20: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2a30: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2a40: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2a50: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2a60: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2a70: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2a80: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2a90: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2aa0: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2ab0: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2ac0: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2ad0: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2af0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2b00: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2b10: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2b20: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2b30: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2b40: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2b50: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2b60: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
2b70: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
2b80: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
2b90: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2ba0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
2bb0: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
2bc0: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
2bd0: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
2be0: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
2bf0: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
2c00: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
2c10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
2c20: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
2c30: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
2c40: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
2c50: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
2c60: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
2c70: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
2c80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c90: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2ca0: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
2cb0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2cc0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
2cd0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2ce0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
2cf0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2d00: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
2d10: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2d20: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
2d30: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
2d40: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
2d50: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d60: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d70: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
2d80: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2d90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
2da0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2db0: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
2dc0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
2dd0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
2de0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
2df0: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
2e00: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
2e10: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2e20: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2e30: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2e40: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2e50: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2e60: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2e70: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2e80: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2e90: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2ea0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2eb0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2ec0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2ed0: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2ee0: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2ef0: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2f00: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2f10: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2f20: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2f30: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2f40: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2f50: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2f60: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2f70: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2f80: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2f90: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2fa0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2fb0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2fc0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2fd0: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2fe0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2ff0: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3000: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
3010: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
3020: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
3030: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
3040: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
3050: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
3060: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3070: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3080: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3090: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
30a0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
30b0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
30c0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
30d0: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
30e0: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
30f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3100: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
3110: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
3120: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
3130: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
3140: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
3150: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
3160: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3170: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3180: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3190: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
31a0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
31b0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
31c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
31d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
31e0: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
31f0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3200: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
3210: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
3220: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
3230: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
3240: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
3250: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
3260: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3270: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3280: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3290: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
32a0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
32b0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
32c0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
32d0: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
32e0: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
32f0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3300: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
3310: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
3320: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
3330: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
3340: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
3350: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
3360: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3370: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3380: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3390: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
33a0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
33b0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
33c0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
33d0: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
33e0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
33f0: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3400: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
3410: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
3420: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3430: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
3440: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
3450: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
3460: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3470: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3480: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3490: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
34a0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
34b0: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
34c0: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
34d0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
34e0: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
34f0: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3500: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3510: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3520: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3530: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
3540: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
3550: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
3560: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3570: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3580: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3590: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
35a0: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
35b0: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
35c0: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
35d0: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
35e0: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
35f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3600: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3610: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3620: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3630: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3640: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3650: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3660: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3670: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3680: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3690: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
36a0: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
36b0: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
36c0: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
36d0: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
36e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
36f0: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3700: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3710: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3720: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3730: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
3740: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
3750: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3760: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
3770: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
3780: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3790: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
37a0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
37b0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
37c0: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
37d0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
37e0: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
37f0: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
3800: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
3810: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
3820: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3830: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
3840: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
3850: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
3860: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
3870: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
3880: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
3890: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
38a0: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
38b0: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
38c0: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
38d0: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
38e0: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
38f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
3900: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
3910: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
3920: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
3930: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
3940: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3950: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
3960: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3970: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
3980: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
3990: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
39a0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
39b0: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
39c0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
39d0: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
39e0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
39f0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3a00: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3a10: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3a20: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3a30: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
3a40: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
3a50: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
3a60: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
3a70: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
3a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a90: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
3aa0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3ab0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3ac0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3ad0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3ae0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3af0: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3b00: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3b10: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3b20: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3b30: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3b40: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3b50: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3b60: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3b70: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3b80: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
3b90: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
3ba0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
3bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
3bc0: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
3bd0: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
3be0: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3bf0: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3c00: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3c10: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3c20: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3c30: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3c40: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3c50: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3c60: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3c70: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3c80: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
3c90: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
3ca0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3cb0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3cc0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
3cd0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
3ce0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3cf0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3d00: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3d10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d20: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3d30: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3d40: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3d50: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3d60: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3d70: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3d80: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3d90: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
3da0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
3db0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
3dc0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
3dd0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
3de0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
3df0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3e00: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3e10: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3e20: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3e30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3e40: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3e50: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3e60: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3e70: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3e80: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3e90: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
3ea0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
3eb0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
3ec0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
3ed0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
3ee0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
3ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3f00: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3f10: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3f20: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3f30: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3f40: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3f50: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3f60: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3f70: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3f80: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3f90: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
3fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
3fb0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
3fc0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
3fd0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
3fe0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
3ff0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
4000: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
4010: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
4020: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
4030: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
4040: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
4050: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
4060: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4070: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4080: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4090: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
40a0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
40b0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
40c0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
40d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
40e0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
40f0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4100: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4110: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4120: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4130: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4140: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
4150: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
4160: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4180: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4190: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
41a0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
41b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
41c0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
41d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
41e0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
41f0: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4200: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4210: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4220: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4230: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4240: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
4250: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4260: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4270: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4280: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4290: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
42a0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
42b0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
42c0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
42d0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
42e0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
42f0: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4300: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
4310: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
4320: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
4330: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
4340: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4350: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
4360: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4370: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4380: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4390: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
43a0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
43b0: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
43c0: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
43d0: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
43e0: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
43f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4400: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
4410: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
4420: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
4430: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
4440: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
4450: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
4460: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4470: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4480: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
44a0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
44b0: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
44c0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
44d0: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
44e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
44f0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4500: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
4510: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
4520: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
4530: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
4540: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
4550: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
4560: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4570: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4580: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4590: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
45a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
45b0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
45c0: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
45d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
45e0: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
45f0: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
4600: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
4610: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
4620: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
4630: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
4640: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
4650: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
4660: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4670: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
4680: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
4690: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
46a0: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
46b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
46c0: 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62  f no value has b
46d0: 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72  een provided for
46e0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
46f0: 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69  ER_THREADS, or i
4700: 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50  f.** SQLITE_TEMP
4710: 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f  _STORE is set to
4720: 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65   3 (never use te
4730: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20  mporary files), 
4740: 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72  set it.** to zer
4750: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
4760: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
4770: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
4780: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
4790: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
47a0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
47b0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
47c0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
47d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
47e0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
47f0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4800: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4810: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
4820: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4830: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4840: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4850: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4860: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
4870: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
4880: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4890: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
48a0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
48b0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
48c0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
48d0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
48e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
48f0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
4900: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4910: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
4920: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
4930: 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61  t initial alloca
4940: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67  tion for the pag
4950: 65 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e  ecache when usin
4960: 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61  g separate.** pa
4970: 67 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63  gecaches for eac
4980: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
4990: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69  ction.  A positi
49a0: 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ve number is the
49b0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  .** number of pa
49c0: 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ges.  A negative
49d0: 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c   number N transl
49e0: 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61  ations means tha
49f0: 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66  t a buffer.** of
4a00: 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69   -1024*N bytes i
4a10: 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  s allocated and 
4a20: 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79  used for as many
4a30: 20 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c   pages as it wil
4a40: 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64  l hold..*/.#ifnd
4a50: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4a60: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
4a70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4a80: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
4a90: 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66  NITSZ 100.#endif
4aa0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
4ab0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
4ac0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
4ad0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
4ae0: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
4af0: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
4b00: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
4b10: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
4b20: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
4b30: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
4b40: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
4b50: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
4b60: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
4b70: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
4b80: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
4b90: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
4ba0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
4bb0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
4bc0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
4bd0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
4be0: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
4bf0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
4c00: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
4c10: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
4c20: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
4c30: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
4c40: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
4c50: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
4c60: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
4c70: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
4c80: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
4c90: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
4ca0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
4cb0: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
4cc0: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
4cd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
4ce0: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
4cf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
4d00: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
4d10: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
4d20: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
4d30: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
4d40: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
4d50: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
4d60: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
4d70: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
4d80: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
4d90: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
4da0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
4db0: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
4dc0: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
4dd0: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
4de0: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
4df0: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
4e00: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
4e10: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
4e20: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
4e30: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4e40: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
4e50: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
4e60: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
4e70: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4e80: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
4e90: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
4ea0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
4eb0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4ec0: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
4ed0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
4ee0: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
4ef0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4f00: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
4f10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4f20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4f30: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
4f40: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
4f50: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
4f60: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
4f70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
4f80: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
4f90: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4fa0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
4fb0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4fc0: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
4fd0: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
4fe0: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
4ff0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5000: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5010: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5020: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5030: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5040: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5050: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5060: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5070: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5080: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5090: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
50a0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
50b0: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
50c0: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
50d0: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
50e0: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
50f0: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5100: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5110: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5120: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5130: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5140: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5150: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5160: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5170: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5180: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5190: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
51a0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
51b0: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
51c0: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
51d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
51e0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
51f0: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5200: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5210: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5220: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5230: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5240: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5250: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5260: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5270: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5280: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5290: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
52a0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
52b0: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
52c0: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
52d0: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
52e0: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
52f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5300: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5310: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5320: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5330: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5340: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5350: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5360: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5370: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5380: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5390: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
53a0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
53b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
53c0: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
53d0: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
53e0: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
53f0: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5400: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5410: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5420: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5430: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5440: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5450: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5460: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5470: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5480: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5490: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
54a0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
54b0: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
54c0: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
54d0: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
54e0: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
54f0: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
5500: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
5510: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
5520: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
5530: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
5540: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
5550: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
5560: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
5570: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
5580: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
5590: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
55a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
55b0: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
55c0: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
55d0: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
55e0: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
55f0: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
5600: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
5610: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
5620: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
5630: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
5640: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
5650: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
5660: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
5670: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
5680: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
5690: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
56a0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
56b0: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
56c0: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
56d0: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
56e0: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
56f0: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
5700: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
5710: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
5720: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
5730: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
5740: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
5750: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
5760: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
5770: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
5780: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
5790: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
57a0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
57b0: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
57c0: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
57d0: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
57e0: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
57f0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
5800: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
5810: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
5820: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
5830: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
5840: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
5850: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
5860: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
5870: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
5880: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
5890: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
58a0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
58b0: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
58c0: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
58d0: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
58e0: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
58f0: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
5900: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
5910: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
5920: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
5930: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
5940: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
5950: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
5960: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
5970: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
5980: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
5990: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
59a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
59b0: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
59c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
59d0: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
59e0: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
59f0: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
5a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5a10: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
5a20: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
5a30: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
5a40: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
5a50: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
5a60: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
5a70: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
5a80: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
5a90: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
5aa0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
5ab0: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
5ac0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
5ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5ae0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
5af0: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
5b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5b10: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
5b20: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
5b30: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
5b40: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
5b50: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
5b60: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
5b70: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
5b80: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
5b90: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
5ba0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
5bb0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
5bc0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
5bd0: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
5be0: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
5bf0: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
5c00: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
5c10: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
5c20: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5c30: 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65  YTEORDER=1 is se
5c40: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
5c50: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
5c60: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
5c70: 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64  .*/.#if (defined
5c80: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5c90: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5ca0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5cb0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5cc0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36     defined(__x86
5cd0: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
5ce0: 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64  __x86_64__) || d
5cf0: 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20  efined(_M_X64)  
5d00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5d10: 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c  ined(_M_AMD64) |
5d20: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d  | defined(_M_ARM
5d30: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5d40: 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20  (__x86)   ||    
5d50: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5d60: 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66  _arm__)) && !def
5d70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5d80: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
5d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5da0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
5db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5dc0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
5dd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5de0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
5df0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5e00: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5e10: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69  TE_UTF16LE.#endi
5e20: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 73  f.#if (defined(s
5e30: 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69  parc)    || defi
5e40: 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c  ned(__ppc__))  \
5e50: 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65 64  .    && !defined
5e60: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
5e70: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5e80: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5e90: 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 64  RDER    4321.# d
5ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
5eb0: 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65  ENDIAN    1.# de
5ec0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5ed0: 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66  LEENDIAN 0.# def
5ee0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5ef0: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
5f00: 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69  TF16BE.#endif.#i
5f10: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5f20: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69  E_BYTEORDER).# i
5f30: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5f40: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
5f50: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
5f60: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
5f70: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
5f80: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
5f90: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
5fa0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5fb0: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5fc0: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5fd0: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5ff0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
6000: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6010: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
6020: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
6030: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
6040: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
6050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6060: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
6070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
6080: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
6090: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
60a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
60b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
60c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
60d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
60e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
60f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
6100: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
6110: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
6120: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
6130: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
6140: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
6150: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
6160: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
6170: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
6180: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
6190: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
61a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
61b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
61c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
61d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
61e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
61f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
6200: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
6210: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
6220: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
6230: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
6240: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
6250: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
6260: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
6270: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
6280: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
6290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
62a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
62b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
62c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
62d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
62e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
62f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
6300: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
6310: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
6320: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
6330: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
6340: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
6350: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
6360: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
6370: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
6380: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
6390: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
63a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
63b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
63c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
63d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
63e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
63f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
6400: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
6410: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
6420: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
6430: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
6440: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
6450: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
6460: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
6470: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
6480: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
6490: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
64a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
64b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
64c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
64d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
64e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
64f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
6500: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
6510: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
6520: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
6530: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
6540: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
6550: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
6560: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6570: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6580: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6590: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
65a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
65b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
65c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
65d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
65e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
65f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
6600: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
6610: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
6620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6630: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6640: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
6650: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
6660: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
6670: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
6680: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
6690: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
66a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
66b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
66c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
66d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
66e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
66f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6700: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
6710: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
6720: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
6730: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6740: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6750: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  E 0.# endif.# de
6760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6770: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f  MMAP_SIZE_xc 1 /
6780: 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * exclude from c
6790: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
67a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
67b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
67c0: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
67d0: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
67e0: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
67f0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6800: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
6810: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
6820: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
6830: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
6840: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
6850: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
6860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
6870: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6880: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6890: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
68a0: 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  ZE 0.# define SQ
68b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
68c0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20  P_SIZE_xc 1  /* 
68d0: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
68e0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  me.c */.#endif.#
68f0: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
6900: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
6910: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6920: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6930: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6940: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6960: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
6970: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
6980: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
6990: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
69a0: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
69b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
69c0: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
69d0: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
69e0: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
69f0: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
6a00: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
6a10: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
6a20: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a30: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
6a40: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6a50: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
6a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
6a70: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6a80: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a90: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6aa0: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6ab0: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
6ac0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
6ad0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6ae0: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
6af0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6b00: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
6b10: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6b20: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
6b30: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
6b40: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
6b50: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
6b60: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
6b70: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
6b80: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
6b90: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
6ba0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
6bb0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
6bc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
6bd0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
6be0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
6bf0: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
6c00: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6c10: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
6c20: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6c30: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
6c40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
6c50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6c60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6c70: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
6c80: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
6c90: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
6ca0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
6cb0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
6cc0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
6cd0: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
6ce0: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
6cf0: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
6d00: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
6d10: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
6d20: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
6d30: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
6d40: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
6d50: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
6d60: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
6d70: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
6d80: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
6d90: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6da0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
6db0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
6dc0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
6dd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6de0: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
6df0: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
6e00: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
6e10: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
6e20: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
6e30: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
6e40: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
6e50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
6e60: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
6e70: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
6e80: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
6eb0: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
6ec0: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
6ed0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
6ee0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6ef0: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
6f00: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
6f10: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
6f20: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
6f30: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
6f40: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
6f50: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
6f60: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
6f70: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
6f80: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
6f90: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
6fa0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6fb0: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
6fc0: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
6fd0: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
6fe0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6ff0: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7000: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7010: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7020: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7030: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7040: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7050: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7060: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7070: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7080: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
7090: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
70a0: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
70b0: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
70c0: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
70d0: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
70e0: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
70f0: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7100: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7110: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7120: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7130: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
7140: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
7150: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
7160: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
7170: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
7180: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7190: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
71a0: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
71b0: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
71c0: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
71d0: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
71e0: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
71f0: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7200: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7210: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7220: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7230: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
7240: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
7250: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
7260: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
7270: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
7280: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
7290: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
72a0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
72b0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
72c0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
72d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
72e0: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
72f0: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
7300: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
7310: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
7320: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
7330: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
7340: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
7350: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
7360: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
7370: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
7380: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
7390: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
73a0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
73b0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
73c0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
73d0: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
73e0: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
73f0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
7400: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
7410: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
7420: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
7430: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
7440: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
7450: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
7460: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
7470: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
7480: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
7490: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
74a0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
74b0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
74c0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
74d0: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
74e0: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
74f0: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
7500: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
7510: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
7520: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
7530: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
7540: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
7550: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
7560: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
7570: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
7580: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
7590: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
75a0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
75b0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
75c0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
75d0: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
75e0: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
75f0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
7600: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
7610: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
7620: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
7630: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
7640: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
7650: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
7660: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
7670: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
7680: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
7690: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
76a0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
76b0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
76c0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
76d0: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
76e0: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
76f0: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
7700: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
7710: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
7720: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
7730: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
7740: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7750: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
7760: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
7770: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
7780: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
7790: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
77a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
77b0: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
77c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
77d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
77e0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
77f0: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
7800: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
7810: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
7820: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
7830: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
7840: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7850: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
7860: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
7870: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
7880: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
7890: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
78a0: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
78b0: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
78c0: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
78d0: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
78e0: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
78f0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
7900: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
7910: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
7920: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
7930: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
7940: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
7950: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
7960: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
7970: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
7980: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
7990: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
79b0: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
79c0: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
79d0: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
79e0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
79f0: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
7a00: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
7a10: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
7a20: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
7a30: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
7a40: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
7a50: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
7a60: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
7a70: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
7a80: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
7a90: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
7aa0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ab0: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
7ac0: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
7ad0: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
7ae0: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
7af0: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
7b00: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
7b10: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
7b20: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
7b30: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
7b40: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
7b50: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
7b60: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
7b70: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
7b80: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
7b90: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
7ba0: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
7bb0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
7bc0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7bd0: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
7be0: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
7bf0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
7c00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
7c10: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
7c20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
7c30: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
7c40: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7c50: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
7c60: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
7c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
7c80: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
7c90: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
7ca0: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
7cb0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
7cc0: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
7cd0: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
7ce0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7cf0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
7d00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
7d10: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
7d20: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
7d30: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
7d40: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
7d50: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
7d60: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
7d70: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
7d80: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
7d90: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
7da0: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
7db0: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
7dc0: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
7dd0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
7de0: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
7df0: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
7e00: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
7e10: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
7e20: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
7e30: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
7e40: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
7e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
7e60: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
7e70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e80: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
7e90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ea0: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
7eb0: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
7ec0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
7ed0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
7ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ef0: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
7f00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
7f10: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
7f20: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7f30: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
7f40: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7f50: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
7f60: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
7f70: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
7f80: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
7f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7fa0: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
7fb0: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
7fc0: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
7fd0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7fe0: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
7ff0: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8000: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8010: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8020: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8030: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8050: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
8060: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
8070: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
8080: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8090: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
80a0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
80b0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
80c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80d0: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
80e0: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
80f0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8100: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8110: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8120: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8130: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8140: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8160: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
8170: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
8180: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
8190: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
81a0: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
81b0: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
81c0: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
81d0: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
81e0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
81f0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8210: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
8220: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
8230: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
8240: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
8250: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
8260: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
8270: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
8280: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
8290: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
82a0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
82b0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
82c0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
82d0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
82e0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
82f0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
8300: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
8310: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
8320: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
8330: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
8340: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
8350: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
8360: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
8370: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
8380: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
8390: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
83a0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
83b0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
83c0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
83d0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
83e0: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
83f0: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
8400: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
8410: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
8420: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
8430: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
8440: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
8450: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
8460: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
8470: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
8480: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
8490: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
84a0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
84b0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
84c0: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
84d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
84e0: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
84f0: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
8500: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
8510: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
8520: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
8530: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
8540: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
8550: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
8560: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
8570: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
8580: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
8590: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
85a0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
85b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
85c0: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
85d0: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
85e0: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
85f0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
8600: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8610: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
8620: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
8630: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
8640: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
8650: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
8660: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
8670: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
8680: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8690: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
86a0: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
86b0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
86c0: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
86d0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
86e0: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
86f0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
8700: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
8710: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
8720: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
8730: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
8740: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
8750: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
8760: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
8770: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
8780: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
8790: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
87a0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
87b0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
87c0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
87d0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
87e0: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
87f0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
8800: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
8810: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
8820: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
8830: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
8840: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
8850: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
8860: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
8870: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
8880: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
8890: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
88a0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
88b0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
88c0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
88d0: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
88e0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
88f0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
8900: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
8910: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
8920: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
8930: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
8940: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
8950: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
8960: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
8970: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
8980: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
8990: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
89a0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
89b0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
89c0: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
89d0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
89e0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
89f0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
8a00: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
8a10: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
8a20: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
8a30: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
8a40: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
8a50: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
8a60: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
8a70: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
8a80: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
8a90: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
8aa0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
8ab0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
8ac0: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
8ad0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
8ae0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
8af0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8b10: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
8b20: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
8b30: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
8b40: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
8b50: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
8b60: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
8b70: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
8b80: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
8b90: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
8ba0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
8bb0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
8bc0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
8bd0: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
8be0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
8bf0: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
8c00: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
8c10: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
8c20: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
8c30: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
8c40: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8c50: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8c60: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
8c70: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
8c80: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
8c90: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8ca0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
8cb0: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
8cc0: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
8cd0: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
8ce0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
8cf0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
8d00: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
8d10: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
8d20: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8d30: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8d40: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
8d50: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8d60: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
8d70: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
8d80: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
8d90: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
8da0: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
8db0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
8dc0: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
8dd0: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
8de0: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
8df0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
8e00: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
8e10: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
8e20: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
8e30: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
8e40: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
8e50: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
8e60: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
8e70: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
8e80: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
8e90: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
8ea0: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
8eb0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
8ec0: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
8ed0: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
8ee0: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
8ef0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
8f00: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
8f10: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
8f20: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
8f30: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
8f40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
8f50: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
8f60: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
8f70: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
8f80: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
8f90: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
8fa0: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
8fb0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
8fc0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
8fd0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
8fe0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
8ff0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
9000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
9010: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
9020: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
9030: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
9040: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
9050: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
9060: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
9070: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
9080: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
9090: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
90a0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
90b0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
90c0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
90d0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
90e0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
90f0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
9100: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
9110: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
9120: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
9130: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
9140: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
9150: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
9160: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
9170: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
9180: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9190: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
91a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
91b0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
91c0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
91d0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
91e0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
91f0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
9200: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
9210: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
9220: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
9230: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
9240: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
9250: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
9260: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
9270: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
9280: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
9290: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
92a0: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
92b0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
92c0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
92d0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
92e0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
92f0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
9300: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9310: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
9320: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
9330: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
9340: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
9350: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
9360: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
9370: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
9380: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9390: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
93a0: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
93b0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
93c0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
93d0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
93e0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
93f0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
9400: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
9410: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
9420: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
9430: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
9440: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
9450: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
9460: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
9470: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
9480: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
9490: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
94a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
94b0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
94c0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
94d0: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
94e0: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
94f0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
9500: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
9510: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
9520: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9540: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
9550: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
9560: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
9570: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
9580: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
9590: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
95a0: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
95b0: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
95c0: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
95d0: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
95e0: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
95f0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
9600: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
9610: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
9620: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
9630: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
9640: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
9650: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
9660: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
9670: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
9680: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
9690: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
96a0: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
96b0: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
96c0: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
96d0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
96e0: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
96f0: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
9700: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
9710: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
9720: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
9730: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
9740: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  on definitions. 
9750: 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   (Application-de
9760: 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f  fined.** functio
9770: 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72  ns use a regular
9780: 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f   table table fro
9790: 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a  m hash.h.).**.**
97a0: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
97b0: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
97c0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
97d0: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
97e0: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
97f0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
9800: 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61  cDef.u.pHash cha
9810: 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  in..*/.#define S
9820: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
9830: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
9840: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
9850: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
9860: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
9870: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
9880: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
9890: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
98a0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
98b0: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
98c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
98d0: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
98e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
98f0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
9900: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
9910: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
9920: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
9930: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
9940: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
9950: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
9960: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
9970: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
9980: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
9990: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
99a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
99b0: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
99c0: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
99d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
99e0: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
99f0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
9a00: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
9a20: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
9a30: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
9a40: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
9a50: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
9a60: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
9a70: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
9a80: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
9a90: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
9aa0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
9ab0: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
9ac0: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
9ad0: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
9ae0: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
9af0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
9b00: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
9b10: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
9b20: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
9b30: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
9b40: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
9b50: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
9b60: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
9b70: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
9b80: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
9b90: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
9ba0: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
9bb0: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
9bc0: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
9bd0: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
9be0: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
9bf0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
9c00: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
9c10: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
9c20: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
9c30: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
9c40: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
9c50: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
9c60: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
9c70: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
9c80: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
9c90: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
9ca0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9cb0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9cc0: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
9cd0: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
9ce0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
9cf0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
9d00: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
9d10: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
9d20: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
9d30: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
9d40: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
9d50: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
9d60: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
9d70: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
9d80: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
9d90: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
9dc0: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
9dd0: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
9de0: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
9df0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
9e00: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
9e10: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9e20: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e40: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
9e50: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  har*);.#endif...
9e60: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9e70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
9e80: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
9e90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9ea0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
9eb0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
9ec0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
9ed0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
9ee0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
9ef0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
9f00: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
9f10: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
9f20: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
9f30: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
9f40: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
9f50: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
9f60: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
9f70: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
9f80: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
9f90: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
9fa0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
9fb0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
9fc0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9fe0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
9ff0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a010: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
a020: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
a030: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
a040: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
a050: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
a060: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
a070: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
a080: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0a0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
a0b0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
a0c0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
a0d0: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a0f0: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
a100: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
a110: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
a120: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
a130: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
a140: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
a150: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
a160: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
a170: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
a180: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
a190: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
a1a0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a1c0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
a1d0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
a1e0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
a1f0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a210: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
a220: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
a230: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
a240: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
a260: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
a270: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a290: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
a2a0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
a2b0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
a2c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
a2d0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
a2e0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
a2f0: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a310: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
a320: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
a330: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
a340: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
a350: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
a360: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
a370: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
a380: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
a390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
a3a0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
a3b0: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
a3c0: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
a3d0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
a3e0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
a3f0: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
a400: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
a410: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
a420: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
a430: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
a440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
a450: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
a460: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
a470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
a480: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
a490: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
a4a0: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
a4b0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
a4c0: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
a4d0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
a4e0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
a4f0: 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e   a TS */.  int n
a500: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
a510: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
a520: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
a530: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
a540: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
a550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
a560: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
a570: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
a580: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
a590: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
a5a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
a5b0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
a5c0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
a5d0: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
a5e0: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
a5f0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
a600: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
a610: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
a620: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
a630: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
a640: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
a650: 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d   int nMaxSorterM
a660: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  map;           /
a670: 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  * Maximum size o
a680: 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64  f regions mapped
a690: 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20   by sorter */.  
a6a0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
a6b0: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
a6c0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
a6d0: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
a6e0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
a6f0: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
a700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
a710: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
a720: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
a730: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a750: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
a760: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
a770: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
a780: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a7a0: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
a7b0: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
a7c0: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
a7d0: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
a7e0: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
a7f0: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
a800: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
a810: 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72  .    u8 imposter
a820: 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
a830: 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20   /* Building an 
a840: 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a  imposter table *
a850: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
a860: 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20  t nVdbeActive;  
a870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a880: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
a890: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
a8a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52   */.  int nVdbeR
a8b0: 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ead;            
a8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a8d0: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
a8e0: 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  at read or write
a8f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57   */.  int nVdbeW
a900: 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
a910: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a920: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
a930: 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  at read and writ
a940: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
a950: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
a960: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a970: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
a980: 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a  o VdbeExec() */.
a990: 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b    int nVDestroy;
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a9c0: 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20  ive OP_VDestroy 
a9d0: 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  operations */.  
a9e0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa00: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
aa10: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
aa20: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
aa30: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
aa40: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
aa50: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
aa60: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
aa70: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
aa80: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
aa90: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
aaa0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
aab0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aad0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
aae0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
aaf0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
ab00: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
ab10: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
ab20: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
ab30: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
ab40: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
ab50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ab60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
ab70: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
ab80: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
ab90: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
abc0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
abd0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
abe0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
abf0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
ac00: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
ac10: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
ac20: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
ac30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ac40: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
ac50: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
ac60: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
ac70: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
ac80: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
ac90: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
aca0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
acb0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
acc0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
acd0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
ace0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
acf0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
ad00: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
ad10: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
ad20: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
ad30: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
ad40: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
ad50: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
ad60: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
ad70: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
ad80: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
ad90: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
ada0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
adb0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
adc0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
add0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
ade0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
adf0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
ae00: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
ae10: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
ae20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
ae30: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
ae40: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
ae50: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
ae60: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
ae70: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
ae80: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
ae90: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
aea0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
aeb0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
aec0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
aed0: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
aee0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
af00: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
af10: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
af20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
af30: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
af40: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
af50: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
af60: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
af70: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
af80: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
af90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
afa0: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
afb0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
afc0: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
afd0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
afe0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
aff0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
b000: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
b010: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
b020: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
b030: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
b040: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
b050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
b060: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
b070: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
b080: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
b090: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
b0a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b0b0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
b0c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
b0d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
b0e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
b0f0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
b100: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
b110: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
b120: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
b130: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
b140: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
b150: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
b160: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
b170: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
b180: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
b190: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
b1a0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
b1b0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
b1c0: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
b1d0: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
b1e0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
b1f0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
b200: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
b210: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
b220: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
b230: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
b240: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
b250: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
b260: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
b270: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b290: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
b2a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
b2b0: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
b2c0: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
b2d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
b2e0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b2f0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
b300: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
b310: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
b320: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
b330: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
b340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
b350: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
b360: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
b370: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
b380: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
b390: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
b3a0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
b3b0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
b3c0: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
b3d0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
b3e0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
b3f0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
b400: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b420: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
b430: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
b440: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
b450: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
b460: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b470: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
b480: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
b490: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
b4a0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
b4b0: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
b4c0: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
b4d0: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
b4e0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
b4f0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
b500: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
b510: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
b520: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b530: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
b540: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
b550: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
b560: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
b570: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
b580: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
b590: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
b5a0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
b5b0: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
b5c0: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
b5d0: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
b5e0: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
b5f0: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
b600: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
b610: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
b620: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
b630: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
b640: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
b650: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b660: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
b670: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
b680: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
b690: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
b6a0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
b6b0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
b6c0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
b6d0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
b6e0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
b6f0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
b700: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
b710: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
b720: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
b730: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
b740: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
b750: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
b760: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
b770: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
b780: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
b790: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
b7a0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
b7b0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
b7c0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
b7d0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
b7e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
b7f0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
b800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b810: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
b820: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
b830: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
b840: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
b850: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
b860: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
b870: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
b880: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
b890: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
b8a0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
b8b0: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
b8c0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
b8d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b8e0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
b8f0: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
b900: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
b910: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
b920: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
b930: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
b940: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
b950: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
b960: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
b970: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
b980: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
b990: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
b9a0: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
b9b0: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
b9c0: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
b9d0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
b9e0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
b9f0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
ba00: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
ba10: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
ba20: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
ba30: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
ba40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ba50: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
ba60: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
ba70: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
ba80: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
ba90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
baa0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
bab0: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
bac0: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
bad0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
bae0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
baf0: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
bb00: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
bb10: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
bb20: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
bb30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bb40: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
bb50: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55  0x00000010  /* U
bb60: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
bb70: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
bb80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
bb90: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78  acheSpill     0x
bba0: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20  00000020  /* OK 
bbb0: 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63  to spill pager c
bbc0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
bbd0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
bbe0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
bbf0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
bc00: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
bc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc20: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
bc30: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
bc40: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
bc50: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
bc90: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
bca0: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcd0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
bce0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
bcf0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
bd00: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
bd10: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
bd20: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
bd30: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
bd40: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
bd80: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
bd90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bda0: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
bdb0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
bdc0: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
bdd0: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
bde0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bdf0: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
be00: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
be10: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
be20: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
be30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be40: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
be50: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
be60: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
be70: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
be80: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
be90: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
bea0: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
beb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
bec0: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
bed0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
bee0: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
bef0: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
bf00: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
bf10: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
bf20: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
bf30: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
bf40: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
bf50: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
bf60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bf70: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
bf80: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
bf90: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
bfa0: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
bfb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bfc0: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
bfd0: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
bfe0: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
bff0: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
c000: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
c010: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
c020: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
c030: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
c040: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c050: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
c060: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
c070: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
c080: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
c090: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
c0a0: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
c0b0: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
c0c0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
c0d0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
c0e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
c0f0: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
c100: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
c110: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
c120: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
c130: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
c140: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
c150: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
c160: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
c170: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c180: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
c190: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
c1a0: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
c1b0: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
c1c0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
c1d0: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
c1e0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
c1f0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
c200: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c210: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
c220: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
c230: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
c240: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
c250: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
c260: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
c270: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
c280: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
c290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c2a0: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
c2b0: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
c2c0: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
c2d0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
c2e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75  ine SQLITE_Vacuu
c2f0: 6d 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  m         0x0800
c300: 30 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74  0000  /* Current
c310: 6c 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a  ly in a VACUUM *
c320: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c330: 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20  _CellSizeCk     
c340: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
c350: 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20  heck btree cell 
c360: 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f  sizes on load */
c370: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
c380: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
c390: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
c3a0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
c3b0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
c3c0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
c3d0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
c3e0: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
c3f0: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
c400: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
c410: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
c420: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
c430: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
c440: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
c450: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
c460: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
c470: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
c480: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
c490: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
c4a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c4b0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
c4c0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
c4d0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
c4e0: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
c4f0: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
c500: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
c510: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
c520: 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20  toring */./*    
c530: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20              not 
c540: 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20  used    0x0010  
c550: 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f   // Was: SQLITE_
c560: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a  IdxRealAsInt */.
c570: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
c580: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
c590: 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0020   /* DISTIN
c5a0: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
c5b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c5c0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
c5d0: 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f    0x0040   /* Co
c5e0: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
c5f0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
c600: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
c610: 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20  oin 0x0080   /* 
c620: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
c630: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
c640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75  define SQLITE_Su
c650: 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30  bqCoroutine  0x0
c660: 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74  100   /* Evaluat
c670: 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20  e subqueries as 
c680: 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64  coroutines */.#d
c690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
c6a0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32  nsitive     0x02
c6b0: 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  00   /* Transiti
c6c0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
c6d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c6e0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
c6f0: 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0400   /* Omit
c700: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
c710: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
c720: 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34  ne SQLITE_Stat34
c730: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20           0x0800 
c740: 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f    /* Use STAT3 o
c750: 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a  r STAT4 data */.
c760: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
c770: 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78  ursorHints    0x
c780: 32 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50  2000   /* Add OP
c790: 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f  _CursorHint opco
c7a0: 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  des */.#define S
c7b0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
c7c0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
c7d0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
c7e0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
c7f0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
c800: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
c810: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
c820: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
c830: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
c840: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
c850: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
c860: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
c870: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
c880: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
c890: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
c8a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
c8b0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
c8c0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
c8d0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
c8e0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
c8f0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c900: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
c910: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
c920: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
c930: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
c940: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
c950: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
c960: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
c970: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
c980: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
c990: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
c9a0: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
c9b0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
c9c0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
c9d0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
c9e0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
c9f0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
ca00: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
ca10: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
ca20: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
ca30: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
ca40: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
ca50: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
ca60: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
ca70: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
ca80: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
ca90: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
caa0: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
cab0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
cac0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
cad0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
cae0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
caf0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
cb00: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
cb10: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
cb20: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
cb30: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
cb40: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
cb50: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
cb60: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
cb70: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
cb80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cb90: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
cba0: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
cbb0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
cbc0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
cbd0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
cbe0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
cbf0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
cc00: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
cc10: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
cc20: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
cc30: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
cc40: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
cc50: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
cc60: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
cc70: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
cc80: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
cc90: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
cca0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
ccb0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
ccc0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
ccd0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
cce0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
ccf0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
cd00: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
cd10: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
cd20: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
cd30: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
cd40: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
cd50: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
cd60: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
cd70: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
cd80: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
cd90: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
cda0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
cdb0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
cdc0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
cdd0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
cde0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
cdf0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
ce00: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
ce10: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
ce20: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
ce30: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
ce40: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
ce50: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
ce60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ce70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
ce80: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
ce90: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
cea0: 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20   u16 funcFlags; 
ceb0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
cec0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
ced0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
cee0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
cef0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
cf00: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
cf10: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
cf20: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
cf30: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
cf40: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
cf50: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
cf60: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
cf70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
cf80: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
cf90: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
cfa0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
cfb0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfd0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
cfe0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
cff0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
d000: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
d010: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
d020: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
d030: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
d040: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
d050: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
d060: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
d070: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
d080: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
d090: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
d0a0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
d0b0: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
d0c0: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
d0d0: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
d0e0: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
d0f0: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
d100: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
d110: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
d120: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
d130: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
d140: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
d150: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
d160: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
d170: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
d180: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
d190: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
d1a0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
d1b0: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
d1c0: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
d1d0: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
d1e0: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
d1f0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
d200: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
d210: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
d220: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
d230: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
d240: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
d250: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
d260: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
d270: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
d280: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
d290: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
d2a0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
d2b0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
d2c0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
d2d0: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
d2e0: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
d2f0: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
d300: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
d310: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
d320: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
d330: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
d340: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
d350: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
d360: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
d370: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
d380: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
d390: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
d3a0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
d3b0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
d3c0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
d3d0: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
d3e0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
d3f0: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
d400: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
d410: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
d420: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
d430: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
d440: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
d450: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
d460: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
d470: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
d480: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
d490: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
d4a0: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
d4b0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
d4c0: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
d4d0: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
d4e0: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
d4f0: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
d500: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
d510: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
d520: 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  this..*/.#define
d530: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
d540: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
d550: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
d560: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
d570: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
d580: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
d590: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
d5a0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
d5b0: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
d5c0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
d5d0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
d5e0: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
d5f0: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
d600: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
d610: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d620: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
d630: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
d640: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
d650: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
d660: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
d670: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
d680: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
d690: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
d6a0: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
d6b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d6c0: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
d6d0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
d6e0: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
d6f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d700: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
d710: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
d720: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
d730: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
d740: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
d750: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
d760: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
d770: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
d780: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d790: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
d7a0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
d7b0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
d7c0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
d7d0: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
d7e0: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
d7f0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
d800: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d820: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
d830: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
d840: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
d850: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
d860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d870: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
d880: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
d890: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
d8a0: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
d8b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d8c0: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
d8d0: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
d8e0: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
d8f0: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
d920: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
d930: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
d940: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
d950: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
d960: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
d970: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
d980: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
d990: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
d9a0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
d9b0: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
d9c0: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
d9d0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
d9e0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d9f0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
da00: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
da10: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
da20: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
da30: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
da40: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
da50: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
da60: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
da70: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
da80: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
da90: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
daa0: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
dab0: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
dac0: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
dad0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
dae0: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
daf0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
db00: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
db10: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
db20: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
db30: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
db40: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
db50: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
db60: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
db70: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
db80: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
db90: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
dba0: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
dbb0: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
dbc0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
dbd0: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
dbe0: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
dbf0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
dc00: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
dc10: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
dc20: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
dc30: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
dc40: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
dc50: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
dc60: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
dc70: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
dc80: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
dc90: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
dca0: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
dcb0: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
dcc0: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
dcd0: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
dce0: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
dcf0: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
dd00: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
dd10: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
dd20: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
dd30: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
dd40: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
dd50: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
dd60: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
dd70: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
dd80: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
dd90: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
dda0: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
ddb0: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
ddc0: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
ddd0: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
dde0: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
ddf0: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
de00: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
de10: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
de20: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
de30: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
de40: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
de50: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
de60: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
de70: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
de80: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
de90: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
dea0: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
deb0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
dec0: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
ded0: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
dee0: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
def0: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
df00: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
df10: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
df20: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
df30: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
df40: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
df50: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
df60: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
df70: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
df80: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
df90: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
dfa0: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
dfb0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
dfc0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
dfd0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
dfe0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
dff0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
e000: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
e010: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
e020: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
e030: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
e040: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
e050: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
e060: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
e070: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
e080: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e090: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
e0a0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
e0b0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
e0c0: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
e0d0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e0e0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
e0f0: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
e100: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
e110: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
e120: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
e130: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
e140: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
e150: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
e160: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
e170: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
e180: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
e190: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
e1a0: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
e1b0: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
e1c0: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
e1d0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e1e0: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
e1f0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
e200: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
e210: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
e220: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
e230: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
e240: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
e250: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
e260: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
e270: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
e280: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
e290: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
e2a0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
e2b0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
e2c0: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
e2d0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
e2e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
e2f0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
e300: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
e310: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
e320: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
e330: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
e340: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
e350: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e360: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
e370: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
e380: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
e390: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
e3a0: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
e3b0: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
e3c0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
e3d0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
e3e0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
e3f0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
e400: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
e410: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
e420: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
e430: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
e440: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
e450: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
e460: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
e470: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
e480: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
e490: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
e4a0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
e4b0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
e4c0: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
e4d0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
e4e0: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
e4f0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
e500: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
e510: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
e520: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
e530: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
e540: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
e550: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
e560: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
e570: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
e580: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
e590: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
e5a0: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
e5b0: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
e5c0: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
e5d0: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
e5e0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
e5f0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
e600: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
e610: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e630: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
e640: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
e650: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
e660: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
e670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
e680: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
e690: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
e6a0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
e6b0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
e6c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e6d0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
e6e0: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
e6f0: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e710: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
e720: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
e730: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
e740: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
e750: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
e760: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
e770: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
e780: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
e790: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
e7a0: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
e7b0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
e7c0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
e7d0: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
e7e0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
e7f0: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
e800: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
e810: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
e820: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
e830: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
e840: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
e850: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
e860: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
e870: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
e880: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
e890: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
e8a0: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
e8b0: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
e8c0: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
e8d0: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
e8e0: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
e8f0: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
e900: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
e910: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e930: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
e940: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
e950: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
e960: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
e980: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
e990: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
e9a0: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
e9b0: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
e9c0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
e9d0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
e9e0: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
e9f0: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ea10: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
ea20: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
ea30: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
ea40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
ea50: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
ea60: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
ea70: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
ea80: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
ea90: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
eaa0: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
eab0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
eac0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
ead0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
eae0: 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
eaf0: 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
eb00: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
eb10: 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20    char *zDflt;  
eb20: 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
eb30: 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75  ext of the defau
eb40: 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68  lt value */.  ch
eb50: 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f  ar *zType;     /
eb60: 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20  * Data type for 
eb70: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
eb80: 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
eb90: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
eba0: 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
ebb0: 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
ebc0: 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
ebd0: 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
ebe0: 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
ebf0: 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
ec00: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
ec10: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
ec20: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
ec30: 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
ec40: 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
ec50: 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
ec60: 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
ec70: 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
ec80: 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
ec90: 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
eca0: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
ecb0: 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
ecc0: 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
ecd0: 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
ece0: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
ecf0: 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
ed00: 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
ed10: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
ed20: 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
ed30: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
ed40: 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
ed50: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
ed60: 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
ed70: 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
ed80: 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
ed90: 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
eda0: 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  le */../*.** A "
edb0: 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
edc0: 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
edd0: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
ede0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
edf0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
ee00: 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
ee10: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
ee20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
ee30: 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
ee40: 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
ee50: 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
ee60: 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
ee70: 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
ee80: 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
ee90: 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
eea0: 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
eeb0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
eec0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
eed0: 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
eee0: 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
eef0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ef00: 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
ef10: 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
ef20: 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
ef30: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
ef40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
ef50: 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
ef60: 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
ef70: 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
ef80: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
ef90: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
efa0: 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
efb0: 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
efc0: 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
efd0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
efe0: 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
eff0: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
f000: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
f010: 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
f020: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
f030: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
f040: 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
f050: 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
f060: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
f070: 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
f080: 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
f090: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f0a0: 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
f0b0: 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
f0c0: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
f0d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f0e0: 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
f0f0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
f100: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
f110: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
f120: 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20  UNDEFINED -1 /* 
f130: 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70  No sort order sp
f140: 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ecified */../*.*
f150: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
f160: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
f170: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
f180: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
f190: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
f1a0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
f1b0: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
f1c0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
f1d0: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
f1e0: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
f1f0: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
f200: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
f210: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
f220: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
f230: 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42  utively..**.** B
f240: 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
f250: 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
f260: 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
f270: 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
f280: 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
f290: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
f2a0: 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
f2b0: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
f2c0: 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
f2d0: 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
f2e0: 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
f2f0: 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
f300: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
f310: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
f320: 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
f330: 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
f340: 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
f350: 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
f360: 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
f370: 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
f380: 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
f390: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f3a0: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
f3b0: 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
f3c0: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
f3d0: 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
f3e0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
f3f0: 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
f400: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
f410: 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
f420: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
f430: 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
f440: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
f450: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
f460: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
f470: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
f480: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
f490: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
f4a0: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
f4b0: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
f4c0: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
f4d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f4e0: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
f4f0: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
f500: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
f510: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
f520: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
f530: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
f540: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
f550: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
f560: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
f570: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
f580: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
f590: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
f5a0: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
f5b0: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
f5c0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
f5d0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
f5e0: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
f5f0: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
f600: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
f610: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
f620: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
f630: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
f640: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
f650: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
f660: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f670: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
f680: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
f690: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
f6a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
f6b0: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
f6c0: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
f6d0: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
f6e0: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
f6f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
f700: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
f710: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
f720: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f730: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
f740: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
f750: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
f760: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
f770: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
f780: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
f790: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
f7a0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
f7b0: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
f7c0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
f7d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
f7e0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
f7f0: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
f800: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
f810: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
f820: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
f830: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
f840: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
f850: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
f860: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
f870: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
f880: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
f890: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
f8a0: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
f8b0: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
f8c0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
f8d0: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
f8e0: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
f8f0: 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
f900: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
f910: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f920: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
f930: 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
f940: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f950: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
f960: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
f970: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
f980: 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
f990: 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
f9a0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
f9b0: 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
f9c0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
f9d0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
f9e0: 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
f9f0: 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
fa00: 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
fa10: 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
fa20: 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
fa30: 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
fa40: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
fa50: 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
fa60: 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
fa70: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
fa80: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
fa90: 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
faa0: 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
fab0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
fac0: 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
fad0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
fae0: 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
faf0: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
fb00: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
fb10: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
fb20: 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
fb30: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
fb40: 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
fb50: 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
fb60: 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
fb70: 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
fb80: 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
fb90: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
fba0: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
fbb0: 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
fbc0: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
fbd0: 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
fbe0: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
fbf0: 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
fc00: 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
fc10: 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
fc20: 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
fc30: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
fc40: 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
fc50: 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
fc60: 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
fc70: 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
fc80: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
fc90: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
fca0: 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
fcb0: 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
fcc0: 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
fcd0: 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
fce0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
fcf0: 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
fd00: 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
fd10: 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
fd20: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
fd30: 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
fd40: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
fd50: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
fd60: 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
fd70: 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
fd80: 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
fd90: 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
fda0: 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
fdb0: 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
fdc0: 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
fdd0: 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
fde0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
fdf0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
fe00: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
fe10: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
fe20: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
fe30: 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
fe40: 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
fe50: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
fe60: 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
fe70: 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
fe80: 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
fe90: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
fea0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
feb0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
fec0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
fed0: 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
fee0: 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
fef0: 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
ff00: 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
ff10: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
ff20: 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
ff30: 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
ff40: 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
ff50: 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
ff60: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
ff70: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
ff80: 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
ff90: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
ffa0: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
ffb0: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
ffc0: 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
ffd0: 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
ffe0: 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
fff0: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
10000 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
10010 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
10020 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
10030 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
10040 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
10050 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
10060 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
10070 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
10080 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
10090 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
100a0 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
100b0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
100c0 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
100d0 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
100e0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
100f0 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
10100 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
10110 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
10120 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
10130 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
10140 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
10150 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
10160 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
10170 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
10180 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
10190 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
101a0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
101b0 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
101c0 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
101d0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
101e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
101f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
10200 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
10210 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
10220 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
10230 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
10240 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
10250 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
10260 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
10270 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10280 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
10290 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
102a0 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
102b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
102c0 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
102d0 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
102e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
102f0 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
10300 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
10310 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
10320 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
10330 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
10340 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10350 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
10360 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
10370 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
10380 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
10390 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
103a0 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
103b0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
103c0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
103d0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
103e0 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
103f0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
10400 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
10410 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
10420 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
10430 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
10440 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
10450 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
10460 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
10470 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
10480 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
10490 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
104a0 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
104b0 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
104c0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
104d0 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
104e0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
104f0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
10500 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
10510 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
10520 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
10530 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
10540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
10550 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
10560 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
10570 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
10580 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
10590 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
105a0 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
105b0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36  s table */.  i16
105c0 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
105d0 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
105e0 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
105f0 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
10600 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
10610 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10620 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
10630 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
10640 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
10650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10660 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
10670 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
10680 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
10690 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
106a0 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
106b0 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
106c0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
106d0 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
106e0 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
106f0 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
10700 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
10710 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
10720 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
10730 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
10740 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
10750 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
10760 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
10770 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
10780 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
10790 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
107a0 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
107b0 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
107c0 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
107d0 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
107e0 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
107f0 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
10800 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
10810 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
10820 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
10830 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
10840 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
10850 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
10860 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
10870 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
10880 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
10890 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
108a0 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
108b0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
108c0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
108d0 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
108e0 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
108f0 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
10900 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
10910 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
10920 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
10930 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
10940 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
10950 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
10960 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
10970 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
10980 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
10990 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
109a0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
109b0 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
109c0 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
109d0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
109e0 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
109f0 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
10a00 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
10a10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
10a20 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
10a30 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
10a40 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
10a50 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
10a60 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
10a70 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
10a80 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
10a90 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
10aa0 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
10ab0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
10ac0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
10ad0 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
10ae0 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
10af0 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
10b00 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
10b10 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
10b20 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
10b30 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
10b40 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
10b50 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
10b60 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
10b70 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
10b80 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
10b90 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
10ba0 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
10bb0 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
10bc0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
10bd0 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
10be0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
10bf0 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
10c00 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
10c10 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
10c20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
10c30 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
10c40 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
10c50 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
10c60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
10c70 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
10c80 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
10c90 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
10ca0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
10cb0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
10cc0 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
10cd0 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
10ce0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
10cf0 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
10d00 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
10d10 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
10d20 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
10d30 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
10d40 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
10d50 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e  id  0x40    /* N
10d60 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
10d70 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
10d80 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
10d90 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30  idden       0x80
10da0 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
10db0 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
10dc0 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
10dd0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
10de0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
10df0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
10e00 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
10e10 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
10e20 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
10e30 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
10e40 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
10e50 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
10e60 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
10e70 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
10e80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10e90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
10ea0 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10eb0 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
10ec0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
10ed0 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c  Virtual)!=0).#el
10ee0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
10ef0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
10f00 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
10f10 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
10f20 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
10f30 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
10f40 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
10f50 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
10f60 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
10f70 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
10f80 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
10f90 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
10fa0 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
10fb0 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
10fc0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
10fd0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
10fe0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
10ff0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
11000 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
11010 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
11020 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
11030 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
11040 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
11050 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
11060 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
11070 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
11080 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
11090 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
110a0 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
110b0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
110c0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
110d0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
110e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
110f0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
11100 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
11110 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
11120 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
11130 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
11140 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
11150 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
11160 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
11170 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
11180 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
11190 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
111a0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
111b0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
111c0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
111d0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
111e0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
111f0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
11200 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
11210 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
11220 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
11230 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
11240 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
11250 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
11260 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
11270 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
11280 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
11290 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
112a0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
112b0 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
112c0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
112d0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
112e0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
112f0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
11300 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
11310 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
11320 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
11330 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
11340 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
11350 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
11360 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
11370 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
11380 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
11390 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
113a0 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
113b0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
113c0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
113d0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
113e0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
113f0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
11400 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
11410 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
11420 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
11430 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
11440 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
11450 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
11460 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
11470 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
11480 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
11490 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
114a0 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
114b0 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
114c0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
114d0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
114e0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
114f0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
11500 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11510 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
11520 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
11530 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
11540 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
11550 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
11560 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
11570 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
11580 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
11590 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
115a0 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
115b0 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
115c0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
115d0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
115e0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
115f0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
11600 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
11610 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
11620 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
11630 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
11640 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
11650 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
11660 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
11670 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
11680 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
11690 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
116a0 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
116b0 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
116c0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
116d0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
116e0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
116f0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
11700 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
11710 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
11720 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
11730 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
11740 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
11750 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
11760 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
11770 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
11780 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
11790 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
117a0 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
117b0 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
117c0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
117d0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
117e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
117f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
11800 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11810 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
11820 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
11830 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
11840 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
11850 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
11860 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
11870 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
11880 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
11890 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
118a0 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
118b0 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
118c0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
118d0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
118e0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
118f0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
11900 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
11910 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
11920 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
11930 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
11940 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
11950 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
11960 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
11970 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
11980 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
11990 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
119a0 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
119b0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
119c0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
119d0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
119e0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
119f0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
11a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11a10 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
11a20 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
11a30 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
11a40 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
11a50 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
11a60 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
11a70 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
11a80 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
11a90 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
11aa0 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
11ab0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
11ac0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
11ad0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
11ae0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
11af0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
11b00 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
11b10 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
11b20 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
11b30 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
11b40 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
11b50 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
11b60 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
11b70 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
11b80 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
11b90 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
11ba0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
11bb0 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
11bc0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
11bd0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
11be0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
11bf0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
11c00 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
11c10 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
11c20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
11c30 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
11c40 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
11c50 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
11c60 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
11c70 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
11c80 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
11c90 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
11ca0 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
11cb0 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
11cc0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
11cd0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
11ce0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
11cf0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
11d00 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
11d10 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
11d20 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
11d30 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
11d40 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
11d50 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
11d60 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
11d70 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
11d80 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
11d90 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
11da0 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
11db0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
11dc0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
11dd0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
11de0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
11df0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
11e00 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
11e10 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
11e20 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
11e30 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
11e40 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
11e50 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
11e60 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
11e70 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
11e80 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
11e90 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
11ea0 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
11eb0 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
11ec0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
11ed0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
11ee0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
11ef0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
11f00 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
11f10 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
11f20 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
11f30 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
11f40 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
11f50 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
11f60 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
11f70 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
11f80 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
11f90 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
11fa0 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
11fb0 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
11fc0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
11fd0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
11fe0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
11ff0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
12000 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
12010 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
12020 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
12030 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
12040 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
12050 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
12060 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
12070 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
12080 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
12090 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
120a0 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
120b0 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
120c0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
120d0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
120e0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
120f0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
12100 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
12110 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
12120 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
12130 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
12140 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
12150 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
12160 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
12170 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
12180 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
12190 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
121a0 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
121b0 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
121c0 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
121d0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
121e0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
121f0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
12200 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
12210 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
12220 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
12230 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
12240 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
12250 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
12260 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
12270 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
12280 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
12290 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
122a0 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
122b0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
122c0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
122d0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
122e0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
122f0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
12300 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
12310 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
12320 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
12330 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
12340 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
12350 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
12360 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
12370 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
12380 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
12390 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
123a0 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
123b0 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
123c0 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
123d0 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
123e0 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
123f0 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
12400 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
12410 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
12420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12430 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
12440 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
12450 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
12460 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
12470 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
12480 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
12490 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
124a0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
124b0 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
124c0 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
124d0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
124e0 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
124f0 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
12500 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12510 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
12520 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
12530 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
12540 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
12550 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
12560 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
12570 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
12580 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
12590 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
125a0 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
125b0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
125c0 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
125d0 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
125e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
125f0 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
12600 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
12610 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
12620 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
12630 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
12640 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
12650 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
12660 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
12670 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
12680 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
12690 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
126a0 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
126b0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
126c0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
126d0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
126e0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
126f0 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
12700 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
12710 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
12720 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
12730 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
12740 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
12750 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
12760 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
12770 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
12780 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
12790 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
127a0 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
127b0 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
127c0 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
127d0 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
127e0 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
127f0 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
12800 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
12810 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
12820 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
12830 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
12840 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
12850 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
12860 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
12870 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
12880 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
12890 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
128a0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
128b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
128c0 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
128d0 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
128e0 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
128f0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
12900 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
12910 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
12920 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
12930 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
12940 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
12950 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
12960 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
12970 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
12980 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
12990 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
129a0 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
129b0 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
129c0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
129d0 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
129e0 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
129f0 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
12a00 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
12a10 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
12a20 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
12a30 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
12a40 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
12a50 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
12a60 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
12a70 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
12a80 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
12a90 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
12aa0 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
12ab0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
12ac0 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
12ad0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
12ae0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
12af0 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
12b00 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
12b10 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
12b20 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
12b30 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
12b40 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
12b50 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
12b60 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
12b70 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
12b80 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
12b90 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
12ba0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
12bb0 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
12bc0 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
12bd0 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
12be0 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
12bf0 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
12c00 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
12c10 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
12c20 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
12c30 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
12c40 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
12c50 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
12c60 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
12c70 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
12c80 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
12c90 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
12ca0 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
12cb0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
12cc0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
12cd0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
12ce0 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
12cf0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
12d00 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
12d10 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
12d20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
12d30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12d40 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
12d50 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
12d60 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
12d70 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
12d80 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
12d90 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
12da0 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
12db0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
12dc0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
12dd0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
12de0 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
12df0 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
12e00 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
12e10 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
12e20 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e40 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
12e50 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
12e60 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
12e70 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
12e80 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
12e90 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
12ea0 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
12eb0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
12ec0 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
12ed0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
12ee0 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
12ef0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
12f00 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
12f10 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
12f20 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
12f30 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
12f40 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
12f50 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
12f60 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
12f70 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
12f80 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
12f90 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
12fa0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
12fb0 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
12fc0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
12fd0 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
12fe0 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
12ff0 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
13000 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
13010 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
13020 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
13030 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
13040 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
13050 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
13060 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
13070 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
13080 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
13090 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
130a0 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
130b0 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
130c0 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
130d0 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
130e0 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
130f0 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
13100 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
13110 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
13120 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
13130 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
13140 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
13150 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
13160 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
13170 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
13180 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
13190 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
131a0 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
131b0 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
131c0 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
131d0 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
131e0 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
131f0 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
13200 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
13210 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
13220 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
13230 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
13240 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
13250 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
13260 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
13270 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
13280 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
13290 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
132a0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
132b0 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
132c0 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
132d0 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
132e0 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
132f0 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
13300 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
13310 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
13320 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
13330 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
13340 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
13350 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
13360 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
13370 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
13380 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
13390 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
133a0 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
133b0 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
133c0 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
133d0 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
133e0 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
133f0 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
13400 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
13410 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
13420 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
13430 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
13440 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
13450 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
13460 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
13470 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
13480 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
13490 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
134a0 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
134b0 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
134c0 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
134d0 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
134e0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
134f0 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
13500 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
13510 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
13520 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
13530 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
13540 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
13550 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
13560 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
13570 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
13580 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
13590 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
135a0 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
135b0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
135c0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
135d0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
135e0 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
135f0 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
13600 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
13610 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
13620 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
13630 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
13640 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
13650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13660 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
13670 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
13680 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
13690 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
136a0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
136b0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
136c0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
136d0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
136e0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
136f0 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
13700 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
13710 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
13720 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
13730 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
13740 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
13750 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
13760 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
13770 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
13780 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
13790 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
137a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
137b0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
137c0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
137d0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
137e0 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
137f0 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
13800 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
13810 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
13820 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
13830 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
13840 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
13850 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
13860 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13880 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
13890 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
138a0 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
138b0 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
138c0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
138d0 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
138e0 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
138f0 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
13900 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13910 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
13920 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
13930 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
13940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13950 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13960 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
13970 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
13980 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
13990 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
139a0 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
139b0 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
139c0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
139d0 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
139e0 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
139f0 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
13a00 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
13a10 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
13a20 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
13a30 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
13a40 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
13a50 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
13a60 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
13a70 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
13a80 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
13a90 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
13aa0 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
13ab0 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
13ac0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
13ad0 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
13ae0 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
13af0 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
13b00 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
13b10 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
13b20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
13b30 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
13b40 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
13b50 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
13b60 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
13b70 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64   if true */.#ifd
13b80 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
13b90 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
13ba0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
13bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13bc0 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
13bd0 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
13be0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f  .  int nSampleCo
13bf0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  l;          /* S
13c00 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70  ize of IndexSamp
13c10 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f  le.anEq[] and so
13c20 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74   on */.  tRowcnt
13c30 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20   *aAvgEq;       
13c40 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71    /* Average nEq
13c50 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73   values for keys
13c60 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
13c70 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
13c80 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
13c90 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
13ca0 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
13cb0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
13cc0 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e  wEst;       /* N
13cd0 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73  on-logarithmic s
13ce0 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68  tat1 data for th
13cf0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52  is index */.  tR
13d00 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20  owcnt nRowEst0; 
13d10 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
13d20 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72  garithmic number
13d30 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
13d40 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a  index */.#endif.
13d50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
13d60 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
13d70 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
13d80 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
13d90 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
13da0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
13db0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
13dc0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
13dd0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
13de0 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
13df0 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
13e00 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
13e10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
13e20 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
13e30 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
13e40 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
13e50 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
13e60 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
13e70 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
13e80 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
13e90 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
13ea0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
13eb0 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
13ec0 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
13ed0 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
13ee0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
13ef0 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
13f00 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
13f10 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
13f20 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
13f30 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
13f40 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78  e)../* The Index
13f50 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75  .aiColumn[] valu
13f60 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  es are normally 
13f70 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
13f80 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20  .  But.** there 
13f90 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76  are some negativ
13fa0 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61  e values that ha
13fb0 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  ve special meani
13fc0 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58  ng:.*/.#define X
13fd0 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29  N_ROWID     (-1)
13fe0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
13ff0 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f  column is the ro
14000 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58  wid */.#define X
14010 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29  N_EXPR      (-2)
14020 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
14030 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
14040 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  ression */../*.*
14050 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
14060 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
14070 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
14080 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
14090 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67   memory.** using
140a0 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
140b0 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
140c0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
140d0 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
140e0 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
140f0 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
14100 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
14110 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
14120 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
14130 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
14140 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
14150 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
14160 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
14170 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
14180 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
14190 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
141a0 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
141b0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
141c0 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
141d0 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
141e0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
141f0 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
14200 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
14210 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
14220 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
14230 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
14240 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
14250 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
14260 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
14270 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
14280 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
14290 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
142a0 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
142b0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
142c0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
142d0 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
142e0 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
142f0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
14300 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
14310 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
14320 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
14330 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
14340 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
14350 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
14360 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
14370 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
14380 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
14390 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
143a0 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
143b0 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
143c0 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
143d0 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
143e0 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
143f0 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
14400 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
14410 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
14420 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
14430 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
14440 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
14450 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
14460 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
14470 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
14480 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
14490 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
144a0 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
144b0 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
144c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
144d0 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
144e0 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
144f0 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
14500 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
14510 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
14520 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
14530 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
14540 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
14550 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
14560 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
14570 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
14580 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
14590 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
145a0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
145b0 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
145c0 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
145d0 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
145e0 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
145f0 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
14600 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
14610 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
14620 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
14630 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
14640 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
14650 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
14660 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
14670 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
14680 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
14690 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
146a0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
146b0 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
146c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
146d0 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
146e0 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
146f0 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
14720 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
14730 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
14740 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
14750 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
14760 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
14770 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
14780 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
14790 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147b0 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
147c0 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
147d0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
147e0 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
147f0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
14800 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
14810 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
14820 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
14830 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
14840 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
14850 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
14860 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
14870 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
14880 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
14890 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
148a0 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
148b0 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
148c0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
148d0 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
148e0 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
148f0 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
14900 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
14910 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
14920 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
14930 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
14940 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
14950 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
14960 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
14970 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
14980 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
14990 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
149a0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
149b0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
149c0 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
149d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
149e0 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
149f0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
14a00 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
14a10 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
14a20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
14a30 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
14a40 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
14a50 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
14a60 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
14a70 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
14a80 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
14a90 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
14aa0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
14ab0 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
14ac0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
14ad0 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
14ae0 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
14af0 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
14b00 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
14b10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14b20 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
14b30 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
14b40 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
14b50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14b60 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
14b70 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
14b80 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
14bb0 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
14bc0 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
14bd0 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
14c00 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
14c10 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
14c20 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
14c30 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
14c40 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
14c50 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
14c60 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
14c70 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
14c80 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
14c90 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
14ca0 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
14cb0 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
14cc0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
14cd0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
14ce0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
14cf0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
14d00 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
14d10 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
14d20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
14d30 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
14d40 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
14d50 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
14d60 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
14d70 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
14d80 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
14d90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14da0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
14db0 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
14dc0 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
14dd0 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
14de0 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
14df0 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
14e00 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
14e10 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
14e20 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
14e30 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
14e40 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
14e50 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
14e60 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
14e70 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
14e80 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
14e90 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
14ea0 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
14eb0 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
14ec0 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
14ed0 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
14ee0 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
14ef0 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
14f00 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
14f10 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
14f20 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
14f30 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
14f40 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
14f50 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
14f60 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
14f70 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
14f80 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
14f90 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
14fa0 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
14fb0 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
14fc0 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
14fd0 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
14fe0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
14ff0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
15000 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
15010 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
15020 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
15030 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
15040 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
15050 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
15060 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
15070 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
15080 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
15090 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
150a0 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
150b0 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
150c0 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
150d0 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
150e0 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
150f0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
15100 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
15110 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
15120 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
15130 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
15140 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
15150 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
15160 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
15170 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
15180 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
15190 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
151a0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
151b0 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
151c0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
151d0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
151e0 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
151f0 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
15200 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f  _BLOB,.** or TK_
15210 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
15220 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
15230 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
15240 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
15250 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
15260 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
15270 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
15280 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
15290 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a   contains the.**
152a0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
152b0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
152c0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
152d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
152e0 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
152f0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
15300 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
15310 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
15320 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
15330 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
15340 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
15350 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
15360 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
15370 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
15380 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
15390 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
153a0 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
153b0 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
153c0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
153d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
153e0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
153f0 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
15400 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
15410 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
15420 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
15430 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
15440 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
15450 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
15460 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
15470 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
15480 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
15490 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
154a0 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
154b0 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
154c0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
154d0 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
154e0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
154f0 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
15500 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
15510 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
15520 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a  st is.** valid..
15530 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
15540 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
15550 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
15560 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
15570 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
15580 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
15590 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
155a0 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
155b0 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
155c0 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
155d0 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
155e0 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
155f0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
15600 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
15610 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
15620 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
15630 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
15640 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
15650 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
15660 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
15670 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
15680 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
15690 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
156a0 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
156b0 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
156c0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
156d0 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
156e0 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
156f0 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
15700 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
15710 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
15720 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
15730 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
15740 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
15750 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a  question mark.**
15760 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
15770 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
15780 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
15790 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
157a0 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62  he index.** numb
157b0 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
157c0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
157d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
157e0 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
157f0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
15800 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
15810 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
15820 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
15830 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
15840 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
15850 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
15860 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
15870 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
15880 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
15890 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
158a0 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
158b0 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
158c0 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
158d0 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
158e0 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
158f0 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
15900 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
15910 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
15920 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
15930 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
15940 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
15950 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
15960 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
15970 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
15980 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
15990 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
159a0 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
159b0 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
159c0 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
159d0 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
159e0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
159f0 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
15a00 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
15a10 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
15a20 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
15a30 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
15a40 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
15a50 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
15a60 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
15a70 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
15a80 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
15a90 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
15aa0 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
15ab0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
15ac0 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
15ad0 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
15ae0 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
15af0 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
15b00 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
15b10 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
15b20 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
15b30 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
15b40 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
15b50 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
15b60 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
15b70 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
15b80 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
15b90 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
15ba0 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
15bb0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
15bc0 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
15bd0 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
15be0 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
15bf0 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
15c00 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
15c10 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
15c20 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
15c30 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
15c40 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
15c50 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
15c60 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
15c70 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
15c80 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
15c90 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
15ca0 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
15cb0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
15cc0 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
15cd0 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
15ce0 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
15d10 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
15d20 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
15d30 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
15d40 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
15d50 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
15d60 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
15d70 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
15d80 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
15d90 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
15da0 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
15db0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
15dc0 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
15dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
15de0 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
15df0 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
15e00 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
15e10 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
15e20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
15e30 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
15e40 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
15e50 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
15e60 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
15e70 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
15e80 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
15e90 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
15ea0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
15eb0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
15ec0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
15ed0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
15ee0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
15ef0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
15f00 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
15f10 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
15f20 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
15f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
15f70 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
15f80 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
15f90 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
15fa0 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
15fb0 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
15fc0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
15fd0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
15fe0 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
15ff0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
16000 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
16010 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
16020 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
16030 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
16040 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
16050 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
16060 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
16070 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
16080 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
16090 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
160a0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
160b0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
160c0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
160d0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
160e0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
160f0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
16100 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
16110 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
16120 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
16130 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
16140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
16180 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
16190 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
161a0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
161b0 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
161c0 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
161d0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
161e0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
161f0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
16200 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
16210 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16220 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
16230 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16250 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
16260 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
16290 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
162a0 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
162d0 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
162e0 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f  es likelihood */
162f0 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
16300 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
16310 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
16320 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
16330 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16350 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
16360 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
16370 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
16380 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
16390 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
163a0 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
163b0 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
163c0 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
163d0 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
163e0 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
163f0 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
16400 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
16410 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
16440 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
16450 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
16480 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
16490 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
164c0 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
164d0 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
164e0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
164f0 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
16500 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
16510 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
16520 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
16530 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
16540 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
16550 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
16560 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  s. */.};../*.** 
16570 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
16580 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
16590 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
165a0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
165b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
165c0 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
165d0 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
165e0 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
165f0 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
16600 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
16610 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
16620 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
16630 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
16640 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
16650 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
16660 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a  ved  0x000004 /*
16670 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
16680 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
16690 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
166a0 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30  _Error     0x000
166b0 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  008 /* Expressio
166c0 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
166d0 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
166e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
166f0 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
16700 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
16710 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
16720 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
16730 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
16740 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
16750 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
16760 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
16770 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
16780 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
16790 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
167a0 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
167b0 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
167c0 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
167d0 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
167e0 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
167f0 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
16800 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
16810 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
16820 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
16830 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
16840 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a  LLATE operator *
16850 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e  /.#define EP_Gen
16860 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20  eric   0x000200 
16870 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54  /* Ignore COLLAT
16880 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e  E or affinity on
16890 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64   this tree */.#d
168a0 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
168b0 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49  e  0x000400 /* I
168c0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
168d0 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
168e0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
168f0 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30  _xIsSelect 0x000
16900 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  800 /* x.pSelect
16910 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
16920 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
16930 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
16940 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30  kip      0x00100
16950 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53  0 /* COLLATE, AS
16960 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f  , or UNLIKELY */
16970 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
16980 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f  ced   0x002000 /
16990 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
169a0 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
169b0 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
169c0 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
169d0 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78  y 0x004000 /* Ex
169e0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54  pr struct EXPR_T
169f0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
16a00 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
16a10 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
16a20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64  0x008000 /* Held
16a30 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
16a40 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
16a50 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  loc() */.#define
16a60 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78   EP_MemToken  0x
16a70 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
16a80 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
16a90 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
16aa0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
16ab0 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f  duce  0x020000 /
16ac0 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
16ad0 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
16ae0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
16af0 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30  Unlikely  0x0400
16b00 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
16b10 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
16b20 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
16b30 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e  fine EP_ConstFun
16b40 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20  c 0x080000 /* A 
16b50 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
16b60 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47  TANT or _SLOCHNG
16b70 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
16b80 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c  fine EP_CanBeNul
16b90 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61  l 0x100000 /* Ca
16ba0 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74  n be null despit
16bb0 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  e NOT NULL const
16bc0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
16bd0 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78   EP_Subquery  0x
16be0 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63  200000 /* Tree c
16bf0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c  ontains a TK_SEL
16c00 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ECT operator */.
16c10 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73  #define EP_Alias
16c20 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a       0x400000 /*
16c30 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   Is an alias for
16c40 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f   a result set co
16c50 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  lumn */../*.** C
16c60 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
16c70 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
16c80 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
16c90 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
16ca0 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
16cb0 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
16cc0 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
16cd0 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
16ce0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
16cf0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
16d00 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
16d10 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
16d20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
16d30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
16d40 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
16d50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
16d60 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
16d70 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
16d80 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
16d90 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
16da0 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
16db0 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
16dc0 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
16dd0 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
16de0 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
16df0 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
16e00 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
16e10 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
16e20 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
16e30 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
16e40 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
16e50 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
16e60 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
16e70 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
16e80 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
16e90 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
16ea0 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
16eb0 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
16ec0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
16ed0 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
16ee0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
16ef0 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
16f00 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
16f10 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
16f20 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
16f30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
16f40 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
16f50 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
16f60 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
16f70 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
16f80 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20  r.** struct, an 
16f90 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
16fa0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
16fb0 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
16fc0 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e  .flags.** and an
16fd0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
16fe0 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
16ff0 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
17000 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
17010 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
17020 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
17030 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
17040 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
17050 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
17060 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
17070 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
17080 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
17090 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
170a0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
170b0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
170c0 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
170d0 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
170e0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
170f0 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
17100 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
17110 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
17120 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20  ader comment.** 
17130 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
17140 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
17150 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
17160 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
17170 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
17180 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
17190 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
171a0 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
171b0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
171c0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
171d0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
171e0 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
171f0 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
17200 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
17210 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
17220 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
17230 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
17240 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
17250 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
17260 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
17270 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
17280 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
17290 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
172a0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
172b0 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
172c0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
172d0 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
172e0 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
172f0 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
17300 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
17310 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
17320 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
17330 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
17340 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
17350 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
17360 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
17370 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
17380 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
17390 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
173a0 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
173b0 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
173c0 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
173d0 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
173e0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
173f0 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
17400 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
17410 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
17420 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
17430 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
17440 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
17450 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
17460 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
17470 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
17480 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
17490 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
174a0 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
174b0 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
174c0 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
174d0 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
174e0 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
174f0 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
17500 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
17510 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
17520 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
17530 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17540 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
17550 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  e list */.  stru
17560 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
17570 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
17580 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
17590 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
175a0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
175b0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74       /* The list
175c0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
175d0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
175e0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
175f0 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
17600 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
17610 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
17620 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
17630 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
17640 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
17650 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
17660 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
17670 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
17680 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
17690 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
176a0 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
176b0 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
176c0 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
176d0 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
176e0 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
176f0 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
17700 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
17710 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
17720 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  MN */.    unsign
17730 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20  ed reusable :1; 
17740 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78    /* Constant ex
17750 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73  pression is reus
17760 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  able */.    unio
17770 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
17780 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
17790 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
177a0 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
177b0 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
177c0 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
177d0 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
177e0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
177f0 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
17800 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
17810 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
17820 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
17830 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
17840 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
17850 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
17860 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
17870 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20     } u;.  } *a; 
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65   /* Alloc a powe
178a0 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72  r of two greater
178b0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78   or equal to nEx
178c0 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  pr */.};../*.** 
178d0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
178e0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
178f0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72   used by the par
17900 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f  ser to record bo
17910 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20  th.** the parse 
17920 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72  tree for an expr
17930 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
17940 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78  pan of input tex
17950 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72  t for an.** expr
17960 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ession..*/.struc
17970 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45  t ExprSpan {.  E
17980 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
17990 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72       /* The expr
179a0 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65  ession parse tre
179b0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
179c0 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20  r *zStart;   /* 
179d0 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  First character 
179e0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
179f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
17a00 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20  End;     /* One 
17a10 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74  character past t
17a20 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20  he end of input 
17a30 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  text */.};../*.*
17a40 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
17a50 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
17a60 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c  can hold a simpl
17a70 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69  e list of identi
17a80 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61  fiers,.** such a
17a90 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c  s the list "a,b,
17aa0 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  c" in the follow
17ab0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a  ing statements:.
17ac0 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52  **.**      INSER
17ad0 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
17ae0 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20  VALUES ...;.**  
17af0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
17b00 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29   idx ON t(a,b,c)
17b10 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
17b20 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45   TRIGGER trig BE
17b30 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
17b40 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a  (a,b,c) ...;.**.
17b50 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e  ** The IdList.a.
17b60 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65  idx field is use
17b70 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73  d when the IdLis
17b80 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
17b90 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75   list of.** colu
17ba0 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61  mn names after a
17bb0 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61   table name in a
17bc0 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
17bd0 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74  nt.  In the stat
17be0 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ement.**.**     
17bf0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
17c00 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49  b,c) ....**.** I
17c10 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74  f "a" is the k-t
17c20 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c  h column of tabl
17c30 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69  e "t", then IdLi
17c40 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a  st.a[0].idx==k..
17c50 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74  */.struct IdList
17c60 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69   {.  struct IdLi
17c70 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
17c80 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
17c90 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
17ca0 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20  dentifier */.   
17cb0 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20   int idx;       
17cc0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
17cd0 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d  ome Table.aCol[]
17ce0 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
17cf0 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  ed zName */.  } 
17d00 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20  *a;.  int nId;  
17d10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17d20 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20   of identifiers 
17d30 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
17d40 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74  ;../*.** The bit
17d50 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65  mask datatype de
17d60 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75  fined below is u
17d70 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  sed for various 
17d80 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
17d90 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
17da0 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74  is from a 64-bit
17db0 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70   to a 32-bit typ
17dc0 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d  e limits the num
17dd0 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73  ber of.** tables
17de0 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32   in a join to 32
17df0 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20   instead of 64. 
17e00 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64   But it also red
17e10 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a  uces the size.**
17e20 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   of the library 
17e30 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20  by 738 bytes on 
17e40 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ix86..*/.#ifdef 
17e50 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
17e60 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53 51  YPE.  typedef SQ
17e70 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50  LITE_BITMASK_TYP
17e80 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65  E Bitmask;.#else
17e90 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20 42  .  typedef u64 B
17ea0 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a  itmask;.#endif..
17eb0 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
17ec0 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
17ed0 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
17ee0 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
17ef0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
17f00 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
17f10 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
17f20 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
17f30 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
17f40 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
17f50 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
17f60 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53  (n)).#define MAS
17f70 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73  KBIT32(n) (((uns
17f80 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e  igned int)1)<<(n
17f90 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
17fa0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
17fb0 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
17fc0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
17fd0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17fe0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
17ff0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
18000 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
18010 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
18020 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
18030 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
18040 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
18050 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
18060 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
18070 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
18080 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
18090 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
180a0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
180b0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
180c0 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
180d0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
180e0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
180f0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
18100 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
18110 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
18120 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
18130 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
18140 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
18150 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
18160 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
18170 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
18180 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
18190 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
181a0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
181b0 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
181c0 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
181d0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
181e0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
181f0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
18200 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
18210 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
18220 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
18230 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
18240 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
18250 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
18260 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
18270 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
18280 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
18290 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
182a0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
182b0 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
182c0 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
182d0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
182e0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
182f0 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
18300 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
18310 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
18320 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
18330 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
18340 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
18350 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
18360 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
18370 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
18380 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
18390 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
183a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
183b0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
183c0 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
183d0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
183e0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
183f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
18400 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
18410 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
18420 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
18430 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
18440 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
18450 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
18460 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
18470 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
18480 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
18490 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
184a0 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
184b0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
184c0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
184d0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
184e0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
184f0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
18500 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
18510 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
18520 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
18530 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
18540 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
18550 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
18560 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
18570 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
18580 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
18590 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
185a0 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
185b0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
185c0 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
185d0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
185e0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
185f0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
18600 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
18610 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
18620 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
18630 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
18640 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
18650 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
18660 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
18670 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
18680 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
18690 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
186a0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
186b0 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
186c0 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
186d0 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
186e0 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
186f0 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
18700 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
18710 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
18720 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
18730 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
18740 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18750 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
18760 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
18770 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
18780 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
18790 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
187a0 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
187b0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
187c0 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
187d0 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
187e0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
187f0 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
18800 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
18810 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
18820 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18830 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
18840 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
18850 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
18860 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
18870 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
18880 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
18890 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
188a0 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
188b0 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
188c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
188d0 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
188e0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
188f0 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
18900 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
18910 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
18920 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
18930 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
18940 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
18950 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
18960 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
18970 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
18980 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
18990 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
189a0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
189b0 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
189c0 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
189d0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
189e0 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
189f0 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
18a00 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
18a10 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
18a20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
18a30 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
18a40 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
18a50 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
18a60 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
18a70 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
18a80 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
18a90 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
18aa0 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
18ab0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
18ac0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
18ad0 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
18ae0 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
18af0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
18b00 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
18b10 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
18b20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
18b30 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
18b40 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
18b50 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
18b60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
18b70 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
18b80 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
18b90 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
18ba0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
18bb0 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
18bc0 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
18bd0 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
18be0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
18bf0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
18c00 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
18c10 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
18c20 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
18c30 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
18c40 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
18c50 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
18c60 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
18c70 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
18c80 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
18c90 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
18ca0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
18cb0 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
18cc0 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
18cd0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
18ce0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
18cf0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
18d00 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
18d10 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
18d20 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
18d30 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
18d40 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
18d50 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
18d60 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
18d70 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
18d80 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
18d90 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
18da0 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
18db0 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
18dc0 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
18dd0 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  member..*/.#defi
18de0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
18df0 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
18e00 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
18e10 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
18e20 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
18e30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
18e40 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
18e50 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
18e60 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
18e70 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
18e80 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
18e90 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
18ea0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
18eb0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
18ec0 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
18ed0 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
18ee0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
18ef0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
18f00 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
18f10 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f  S_OK    0x0008 /
18f20 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
18f30 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
18f40 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
18f50 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43  HERE_OMIT_OPEN_C
18f60 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20  LOSE  0x0010 /* 
18f70 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72  Table cursors ar
18f80 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a  e already open *
18f90 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18fa0 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20  FORCE_TABLE     
18fb0 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f   0x0020 /* Do no
18fc0 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f  t use an index-o
18fd0 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64  nly search */.#d
18fe0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54  efine WHERE_ONET
18ff0 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30  ABLE_ONLY    0x0
19000 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65  040 /* Only code
19010 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69   the 1st table i
19020 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64  n pTabList */.#d
19030 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41  efine WHERE_NO_A
19040 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30  UTOINDEX     0x0
19050 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20  080 /* Disallow 
19060 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
19070 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
19080 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
19090 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f      0x0100 /* pO
190a0 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
190b0 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
190c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
190d0 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
190e0 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0200 /* pOrderby
190f0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
19100 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
19110 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
19120 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
19130 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0400 /* All out
19140 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
19150 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
19160 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
19170 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38 30  GROUP      0x080
19180 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
19190 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
191a0 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
191b0 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20  HERE_REOPEN_IDX 
191c0 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20        0x1000 /* 
191d0 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65  Try to use OP_Re
191e0 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64 65 66 69  openIdx */.#defi
191f0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
19200 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32 30 30 30  _MULTIROW 0x2000
19210 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
19220 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
19230 72 6f 77 73 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  rows */../* Allo
19240 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
19250 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
19260 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
19270 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19280 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
19290 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
192a0 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
192b0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
192c0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
192d0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
192e0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
192f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
19300 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
19310 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
19320 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
19330 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
19340 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
19350 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
19360 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
19370 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
19380 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
19390 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
193a0 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
193b0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
193c0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
193d0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
193e0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
193f0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
19400 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
19410 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
19420 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
19430 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
19440 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
19450 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
19460 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
19470 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
19480 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
19490 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
194a0 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
194b0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
194c0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
194d0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
194e0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
194f0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
19500 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
19510 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
19520 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
19530 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
19540 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
19550 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
19560 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
19570 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
19580 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
19590 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
195a0 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
195b0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
195c0 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
195d0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
195e0 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
195f0 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
19600 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
19610 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
19620 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
19630 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
19640 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
19650 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
19660 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
19670 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
19680 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
19690 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
196a0 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
196b0 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
196c0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
196d0 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
196e0 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
196f0 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
19700 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
19710 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
19720 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
19730 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
19740 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
19750 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
19760 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
19770 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
19780 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
19790 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
197a0 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
197b0 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
197c0 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
197d0 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
197e0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
197f0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
19800 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
19810 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
19820 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
19830 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
19840 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
19850 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
19860 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
19870 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
19880 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
19890 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
198a0 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
198b0 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
198c0 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
198d0 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
198e0 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
198f0 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
19900 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
19910 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
19920 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
19930 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19940 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
19950 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
19960 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
19970 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
19980 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
19990 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
199a0 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
199b0 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
199c0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
199d0 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
199e0 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
199f0 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
19a00 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
19a10 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
19a20 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
19a30 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f   field..**.** No
19a40 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  te:  NC_MinMaxAg
19a50 67 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20  g must have the 
19a60 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46  same value as SF
19a70 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a  _MinMaxAgg and.*
19a80 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  * SQLITE_FUNC_MI
19a90 4e 4d 41 58 2e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66  NMAX..**.*/.#def
19aa0 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
19ab0 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
19ac0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19ad0 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
19ae0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
19af0 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20  asAgg    0x0002 
19b00 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
19b10 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
19b20 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
19b30 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
19b40 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
19b50 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
19b60 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
19b70 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
19b80 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
19b90 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
19ba0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
19bb0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
19bc0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
19bd0 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
19be0 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20  0x0010  /* True 
19bf0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
19c00 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
19c10 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
19c20 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32  _IdxExpr   0x002
19c30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
19c40 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  solving columns 
19c50 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  of CREATE INDEX 
19c60 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
19c70 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
19c80 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
19c90 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
19ca0 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
19cb0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19cc0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
19cd0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
19ce0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
19cf0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
19d00 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
19d10 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
19d20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19d30 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
19d40 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
19d50 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
19d60 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
19d70 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
19d80 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
19d90 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
19da0 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
19db0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
19dc0 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
19dd0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
19de0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
19df0 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
19e00 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
19e10 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
19e20 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
19e30 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
19e40 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
19e50 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
19e60 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
19e70 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
19e80 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
19e90 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
19ea0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
19eb0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
19ec0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
19ed0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
19ee0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
19ef0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
19f00 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
19f10 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
19f20 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
19f30 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
19f40 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
19f50 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
19f60 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
19f70 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19f80 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
19f90 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
19fa0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
19fb0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
19fc0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
19fd0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
19fe0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
19ff0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
1a000 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
1a010 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
1a020 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
1a030 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1a040 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
1a050 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1a060 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
1a070 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
1a080 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
1a090 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
1a0a0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
1a0b0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
1a0c0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
1a0d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1a0e0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
1a0f0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
1a100 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
1a110 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
1a120 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
1a130 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1a140 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
1a150 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
1a160 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
1a170 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
1a180 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
1a190 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
1a1a0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1a1b0 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
1a1c0 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
1a1d0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1a1e0 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
1a1f0 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
1a200 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1a210 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
1a220 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
1a230 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
1a240 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
1a250 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
1a260 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
1a270 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
1a280 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
1a290 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
1a2a0 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
1a2b0 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
1a2c0 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
1a2d0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
1a2e0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
1a2f0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1a300 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
1a310 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1a320 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1a330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a340 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
1a350 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
1a360 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
1a370 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1a380 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
1a390 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
1a3a0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
1a3b0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1a3c0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
1a3d0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1a3e0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
1a3f0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
1a400 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
1a410 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
1a420 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
1a430 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
1a440 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1a450 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
1a460 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
1a470 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
1a480 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
1a490 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
1a4a0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1a4b0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1a4c0 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
1a4d0 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
1a4e0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1a4f0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1a500 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
1a510 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1a520 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
1a530 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
1a540 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
1a550 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1a560 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
1a570 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
1a580 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
1a590 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
1a5a0 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
1a5b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1a5c0 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
1a5d0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1a5e0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1a5f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1a600 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ll             0
1a610 78 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  x0002  /* Includ
1a620 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1a630 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1a640 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1a650 20 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e   0x0004  /* Iden
1a660 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1a670 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1a680 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1a690 74 65 20 20 20 20 20 20 20 30 78 30 30 30 38 20  te       0x0008 
1a6a0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1a6b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a6c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
1a6d0 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
1a6e0 78 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74  x0010  /* Uses t
1a6f0 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
1a700 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
1a710 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
1a720 20 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a        0x0020  /*
1a730 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
1a740 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
1a750 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
1a760 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
1a770 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46      0x0040  /* F
1a780 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
1a790 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
1a7a0 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
1a7b0 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
1a7c0 20 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74   0x0080  /* Part
1a7d0 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
1a7e0 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
1a7f0 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
1a800 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79     0x0100  /* Sy
1a810 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
1a820 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
1a830 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69  #define SF_Multi
1a840 56 61 6c 75 65 20 20 20 20 20 20 30 78 30 32 30  Value      0x020
1a850 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c  0  /* Single VAL
1a860 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75  UES term with mu
1a870 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23  ltiple rows */.#
1a880 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
1a890 46 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30  From      0x0400
1a8a0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
1a8b0 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
1a8c0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
1a8d0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1a8e0 65 72 74 20 20 20 20 30 78 30 38 30 30 20 20 2f  ert    0x0800  /
1a8f0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1a900 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1a910 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1a920 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
1a930 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
1a940 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
1a950 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
1a960 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  max() */.#define
1a970 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
1a980 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54      0x2000  /* T
1a990 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
1a9a0 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
1a9b0 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
1a9c0 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1a9d0 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79     0x4000  /* By
1a9e0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1a9f0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1aa00 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1aa10 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1aa20 20 30 78 38 30 30 30 20 20 2f 2a 20 49 6e 63 6c   0x8000  /* Incl
1aa30 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1aa40 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1aa50 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
1aa60 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
1aa70 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
1aa80 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1aa90 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
1aaa0 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
1aab0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1aac0 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
1aad0 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
1aae0 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
1aaf0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1ab00 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
1ab10 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
1ab20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
1ab30 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20  ry index.**     
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab50 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44  identified by pD
1ab60 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1ab70 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65  .**     SRT_Exce
1ab80 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72  pt      Remove r
1ab90 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
1aba0 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
1abb0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1abc0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1abd0 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20  ists      Store 
1abe0 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  a 1 in memory ce
1abf0 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ll pDest->iSDPar
1ac00 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a  m if the result.
1ac10 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ac20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f         set is no
1ac30 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20  t empty..**.**  
1ac40 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20     SRT_Discard  
1ac50 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73     Throw the res
1ac60 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73  ults away.  This
1ac70 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45   is used by SELE
1ac80 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  CT.**           
1ac90 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1aca0 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1acb0 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20  gers whose only 
1acc0 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20  purpose is.**   
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63    the side-effec
1acf0 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e  ts of functions.
1ad00 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
1ad10 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65  e above are free
1ad20 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72   to ignore their
1ad30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1ad40 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20  . Those that.** 
1ad50 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f  follow must hono
1ad60 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1ad70 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1ad80 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1ad90 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20   Generate a row 
1ada0 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67  of output (using
1adb0 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f   the OP_ResultRo
1adc0 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1add0 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29           opcode)
1ade0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
1adf0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1ae00 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d  .**.**     SRT_M
1ae10 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20  em         Only 
1ae20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73  valid if the res
1ae30 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ult is a single 
1ae40 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20  column..**      
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1ae60 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63  tore the first c
1ae70 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72  olumn of the fir
1ae80 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a  st result row.**
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72       in register
1aeb0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1aec0 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65  then abandon the
1aed0 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20   rest.**        
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1aef0 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73  the query.  This
1af00 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70   destination imp
1af10 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a  lies "LIMIT 1"..
1af20 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65  **.**     SRT_Se
1af30 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65  t         The re
1af40 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73  sult must be a s
1af50 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53  ingle column.  S
1af60 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20  tore each.**    
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61   row of result a
1af90 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62  s the key in tab
1afa0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1afb0 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1afc0 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1afd0 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1afe0 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1aff0 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1b020 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1b030 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1b040 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1b050 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1b060 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1b070 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1b080 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1b0b0 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1b0c0 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1b0d0 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b0f0 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1b100 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1b110 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1b140 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1b150 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1b160 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1b170 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1b180 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1b190 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1b1a0 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1b1b0 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1b1c0 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1b1d0 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1b1f0 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1b200 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1b210 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1b240 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1b250 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1b260 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1b290 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1b2a0 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1b2b0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1b2e0 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1b2f0 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1b300 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1b310 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1b320 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1b330 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1b340 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1b350 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1b360 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1b370 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1b380 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b390 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1b3a0 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1b3b0 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1b3c0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1b3d0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1b3e0 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1b3f0 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1b400 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1b430 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1b440 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1b450 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1b460 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1b470 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1b480 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1b490 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1b4a0 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1b4b0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1b4c0 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4e0 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1b4f0 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1b500 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1b510 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1b540 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1b550 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1b560 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1b570 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1b580 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1b590 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1b5a0 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1b5c0 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1b5d0 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1b5e0 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1b5f0 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1b610 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1b620 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1b630 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1b640 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1b650 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1b660 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1b690 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1b6a0 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1b6b0 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1b6d0 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1b6e0 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1b6f0 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1b700 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1b710 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1b720 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1b730 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1b740 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1b750 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1b760 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1b770 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1b780 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1b790 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1b7a0 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1b7b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1b7c0 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1b7d0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1b7e0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1b7f0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1b800 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1b810 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1b820 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1b830 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1b840 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1b850 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1b860 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1b870 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1b880 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1b890 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1b8a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1b8b0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1b8c0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1b8d0 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1b8e0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1b8f0 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1b900 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1b910 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1b920 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1b930 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1b940 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1b950 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1b960 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1b970 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1b980 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1b990 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1b9a0 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1b9b0 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1b9c0 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1b9d0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1b9e0 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1b9f0 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1ba00 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1ba10 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1ba20 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1ba30 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1ba40 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1ba50 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1ba60 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1ba70 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1ba80 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1ba90 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1baa0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1bab0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1bac0 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1bad0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1bae0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1baf0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1bb00 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1bb10 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1bb20 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1bb30 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1bb40 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1bb50 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1bb60 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1bb70 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1bb80 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1bb90 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1bba0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1bbb0 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1bbc0 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1bbd0 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1bbe0 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1bbf0 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1bc00 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72  above. */.  char
1bc10 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20   affSdst;       
1bc20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1bc30 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1bc40 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
1bc50 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1bc60 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1bc70 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1bc80 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1bc90 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1bca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1bcb0 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1bcc0 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1bcd0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1bce0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1bcf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1bd00 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1bd10 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1bd20 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1bd30 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1bd40 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1bd50 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1bd60 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1bd70 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1bd80 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1bd90 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1bda0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a   AUTOINCREMENT.*
1bdb0 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
1bdc0 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
1bdd0 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
1bde0 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
1bdf0 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
1be00 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
1be10 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
1be20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
1be30 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
1be40 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
1be50 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
1be60 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
1be70 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
1be80 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
1be90 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
1bea0 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
1beb0 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ne within trigge
1bec0 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
1bed0 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
1bee0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
1bef0 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
1bf00 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
1bf10 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
1bf20 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
1bf30 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
1bf40 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
1bf50 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
1bf60 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
1bf70 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
1bf80 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
1bf90 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
1bfa0 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
1bfb0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1bfc0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1bfd0 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
1bfe0 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
1bff0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1c000 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1c010 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
1c020 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1c030 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
1c040 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
1c050 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1c060 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
1c070 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
1c080 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
1c090 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
1c0a0 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
1c0b0 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1c0c0 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
1c0d0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
1c0e0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1c0f0 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
1c100 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1c110 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1c120 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
1c130 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ach.** trigger t
1c140 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1c150 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1c160 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1c170 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1c180 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1c190 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1c1a0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1c1b0 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1c1c0 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1c1d0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1c1e0 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1c1f0 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1c200 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1c210 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1c220 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1c230 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1c240 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1c250 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1c260 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1c270 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1c280 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1c290 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1c2a0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1c2b0 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1c2c0 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1c2d0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1c2e0 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1c2f0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1c300 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1c310 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1c320 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1c330 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1c340 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1c350 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1c360 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1c370 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1c380 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1c390 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1c3a0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1c3b0 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1c3c0 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1c3d0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1c3e0 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  SERT.** statemen
1c3f0 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1c400 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1c410 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1c420 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1c430 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1c440 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1c450 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1c460 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1c470 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1c480 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1c490 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1c4a0 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1c4b0 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1c4c0 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1c4d0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1c4e0 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1c4f0 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1c500 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1c510 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1c520 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1c530 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1c540 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c560 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1c570 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1c580 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1c590 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1c5a0 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1c5b0 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1c5c0 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1c5d0 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1c5e0 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1c5f0 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1c600 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1c610 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1c620 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1c630 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1c640 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1c650 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1c660 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1c670 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1c680 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1c690 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1c6a0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1c6b0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1c6c0 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1c6d0 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1c6e0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1c6f0 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1c700 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1c710 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1c720 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1c730 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1c740 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1c750 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1c760 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1c770 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1c780 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1c790 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1c7a0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1c7b0 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1c7c0 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1c7d0 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1c7e0 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1c7f0 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1c800 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1c810 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1c820 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1c830 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1c840 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1c850 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1c860 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1c870 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1c880 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1c890 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1c8a0 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1c8b0 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1c8c0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1c8d0 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1c8e0 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1c8f0 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1c900 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1c910 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1c920 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1c930 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1c940 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1c950 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1c960 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1c970 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1c980 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1c990 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1c9a0 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1c9b0 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1c9c0 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1c9d0 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1c9e0 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1c9f0 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1ca00 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1ca10 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1ca20 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1ca30 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1ca40 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1ca50 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1ca60 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1ca70 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1ca80 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66  hared-cache.** f
1ca90 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1caa0 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1cab0 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1cac0 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1cad0 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1cae0 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1caf0 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1cb00 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1cb10 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1cb20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1cb30 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1cb40 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1cb50 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1cb60 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1cb70 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1cb80 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1cb90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1cba0 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1cbb0 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1cbc0 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1cbd0 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1cbe0 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1cbf0 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1cc00 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1cc10 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1cc20 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1cc30 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1cc40 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1cc50 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1cc60 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1cc70 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1cc80 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1cc90 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1cca0 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1ccb0 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1ccc0 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1ccd0 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1cce0 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1ccf0 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1cd00 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1cd10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1cd20 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1cd30 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1cd40 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1cd50 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1cd60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cd70 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1cd80 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1cd90 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1cda0 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1cdb0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1cdc0 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1cdd0 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1cde0 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1cdf0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1ce00 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1ce10 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1ce20 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1ce30 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1ce40 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1ce50 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1ce60 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1ce70 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1ce80 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1ce90 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1cea0 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1ceb0 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ts */.  u8 disab
1cec0 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20  leLookaside; /* 
1ced0 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
1cee0 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65  lookaside has be
1cef0 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20  en disabled */. 
1cf00 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
1cf10 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  ;     /* Holding
1cf20 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
1cf30 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
1cf40 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
1cf50 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
1cf60 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
1cf70 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1cf80 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
1cf90 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
1cfa0 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
1cfb0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1cfc0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1cfd0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1cfe0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1cff0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
1d000 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
1d010 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d020 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
1d030 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
1d040 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
1d050 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1d060 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
1d070 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
1d080 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  far */.  int nSe
1d090 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1d0a0 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20   Number of sets 
1d0b0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1d0c0 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20   int nOnce;     
1d0d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d0e0 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72  of OP_Once instr
1d0f0 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a  uctions so far *
1d100 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
1d110 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1d120 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
1d130 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1d140 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  Op[] */.  int sz
1d150 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
1d160 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
1d170 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
1d180 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1d190 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64   */.  int iFixed
1d1a0 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Op;        /* Ne
1d1b0 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63  ver back out opc
1d1c0 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20  odes iFixedOp-1 
1d1d0 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20  or earlier */.  
1d1e0 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
1d1f0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1d200 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
1d210 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
1d220 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
1d230 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
1d240 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20   /* Table of an 
1d250 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72  index whose expr
1d260 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1d270 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  d */.  int iCach
1d280 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1d290 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1d2a0 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1d2b0 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1d2c0 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1d2d0 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1d2e0 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1d2f0 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1d300 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1d310 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1d320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d330 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1d340 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1d350 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1d360 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1d370 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1d380 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1d390 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1d3a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1d3b0 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1d3c0 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1d3d0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1d3e0 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1d3f0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1d400 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1d410 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1d420 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1d430 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1d440 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1d450 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1d460 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1d470 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1d480 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1d490 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1d4a0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1d4b0 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1d4c0 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d4e0 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1d4f0 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1d500 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1d510 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1d520 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1d530 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1d540 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1d550 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1d560 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1d570 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1d580 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1d590 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1d5a0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1d5b0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1d5c0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1d5d0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1d5e0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1d5f0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1d600 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1d610 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1d620 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1d630 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1d640 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1d650 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1d660 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1d670 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1d680 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1d690 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1d6a0 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1d6b0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1d6c0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1d6d0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1d6e0 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1d6f0 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1d700 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1d710 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1d720 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1d730 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1d740 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1d750 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1d760 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1d770 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1d780 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1d790 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1d7a0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1d7b0 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1d7c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d7d0 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1d7e0 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1d7f0 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1d800 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1d810 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1d820 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1d830 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1d840 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1d850 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1d860 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1d870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d880 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1d890 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1d8a0 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1d8b0 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1d8c0 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1d8d0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1d8e0 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1d8f0 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1d900 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1d910 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1d920 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
1d930 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1d940 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
1d950 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
1d960 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
1d970 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1d980 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1d990 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1d9a0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1d9b0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1d9c0 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1d9d0 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1d9e0 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1d9f0 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1da00 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1da10 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61  s of OP_CreateTa
1da20 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ble opcode on CR
1da30 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1da40 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
1da50 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
1da60 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
1da70 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
1da80 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
1da90 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
1daa0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
1dab0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
1dac0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
1dad0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
1dae0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
1daf0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1db00 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
1db10 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
1db20 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
1db30 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
1db40 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
1db50 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
1db60 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1db70 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
1db80 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
1db90 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
1dba0 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
1dbb0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
1dbc0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ers */..  /*****
1dbd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dbe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dbf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dc00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dc10 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1dc20 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1dc30 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1dc40 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1dc50 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1dc60 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1dc70 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1dc80 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1dc90 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1dca0 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1dcb0 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1dcc0 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68  arse,nVar) so th
1dcd0 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73  e nVar field mus
1dce0 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66  t be the first f
1dcf0 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65  ield.  ** in the
1dd00 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f   recursive regio
1dd10 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
1dd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
1dd60 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1dd80 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1dd90 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1dda0 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1ddb0 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ddd0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
1dde0 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
1ddf0 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
1de00 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
1de10 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
1de20 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
1de30 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
1de40 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1de50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1de60 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1de70 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1de80 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1de90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1dea0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1deb0 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1dec0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1ded0 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1dee0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1def0 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1df00 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1df10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1df20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1df30 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1df40 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1df60 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1df70 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1df80 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1df90 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1dfa0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1dfb0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1dfc0 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1dfd0 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1dfe0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1dff0 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1e000 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1e010 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1e020 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1e030 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1e040 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1e050 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1e060 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1e070 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1e080 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1e090 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1e0a0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1e0b0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1e0c0 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1e0d0 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1e0e0 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1e0f0 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1e100 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1e110 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1e120 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1e130 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1e140 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1e150 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1e160 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1e170 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1e180 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1e190 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1e1a0 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1e1b0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1e1c0 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1e1d0 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1e1e0 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1e1f0 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1e200 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1e210 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1e220 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1e230 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1e240 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1e250 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1e260 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1e270 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1e280 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1e290 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1e2a0 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1e2b0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1e2c0 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1e2d0 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1e2e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1e2f0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1e300 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1e310 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1e320 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1e330 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1e340 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1e350 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1e360 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1e370 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1e380 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1e390 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1e3a0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1e3b0 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1e3c0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1e3d0 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1e3e0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1e3f0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1e400 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1e410 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1e420 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e440 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1e450 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1e460 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46    With *pWithToF
1e470 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  ree;        /* F
1e480 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62  ree this WITH ob
1e490 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20  ject at the end 
1e4a0 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a  of the parse */.
1e4b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1e4c0 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1e4d0 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1e4e0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1e4f0 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1e500 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e510 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1e520 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1e530 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1e540 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1e550 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1e560 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1e570 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1e580 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1e590 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1e5a0 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1e5b0 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1e5c0 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1e5d0 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1e5e0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1e5f0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1e600 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1e610 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1e620 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1e630 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1e640 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1e650 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1e660 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1e670 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e690 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1e6a0 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1e6b0 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1e6c0 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1e6d0 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1e6e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
1e6f0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1e700 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1e710 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
1e720 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
1e730 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
1e760 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
1e770 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
1e780 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
1e790 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
1e7a0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1e7b0 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
1e7c0 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
1e7d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e7e0 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1e7f0 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1e800 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1e810 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1e820 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1e830 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1e840 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1e850 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1e860 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1e870 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1e880 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1e890 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1e8a0 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1e8b0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1e8c0 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1e8d0 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1e8e0 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1e8f0 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1e900 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1e910 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1e920 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1e930 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1e940 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1e950 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1e960 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1e970 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1e980 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1e990 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1e9a0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1e9b0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1e9c0 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1e9d0 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1e9e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1e9f0 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
1ea00 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
1ea10 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
1ea20 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
1ea30 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ea40 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
1ea50 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
1ea60 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54  en should use BT
1ea70 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f  REE_FORDELETE */
1ea80 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ea90 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1eaa0 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
1eab0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1eac0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1ead0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1eae0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1eaf0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1eb00 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1eb10 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mutation */.#def
1eb20 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  ine OPFLAG_SAVEP
1eb30 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20  OSITION  0x02   
1eb40 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b   /* OP_Delete: k
1eb50 65 65 70 20 63 75 72 73 6f 72 20 70 6f 73 69 74  eep cursor posit
1eb60 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
1eb70 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
1eb80 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f      0x04    /* O
1eb90 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20  P_Delete: index 
1eba0 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a  in a DELETE op *
1ebb0 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
1ebc0 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
1ebd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1ebe0 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
1ebf0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
1ec00 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
1ec10 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  er.. *. * Pointe
1ec20 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
1ec30 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1ec40 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
1ec50 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
1ec60 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
1ec70 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
1ec80 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
1ec90 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
1eca0 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74  ts the. *    dat
1ecb0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1ecc0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1ecd0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1ece0 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1ecf0 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1ed00 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1ed10 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1ed20 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1ed30 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1ed40 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1ed50 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1ed60 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1ed70 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1ed80 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1ed90 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1eda0 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1edb0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1edc0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1edd0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1ede0 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1edf0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1ee00 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1ee10 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1ee20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1ee30 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1ee40 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1ee50 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1ee60 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1ee70 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1ee80 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1ee90 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1eea0 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1eeb0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1eee0 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1eef0 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1ef00 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1ef10 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1ef20 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1ef50 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1ef60 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1ef70 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1ef80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ef90 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1efa0 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1efb0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1efc0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1efd0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1efe0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1eff0 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1f000 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1f010 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1f020 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1f030 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1f040 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1f050 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1f080 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1f090 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1f0a0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1f0b0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1f0c0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1f0d0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1f0e0 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1f0f0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1f100 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1f110 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1f120 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1f130 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1f140 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1f150 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1f160 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1f170 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1f180 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1f190 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1f1a0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1f1b0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1f1c0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1f1d0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1f1e0 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1f1f0 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1f200 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1f210 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
1f220 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
1f230 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
1f240 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
1f250 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
1f260 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
1f270 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
1f280 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
1f290 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
1f2a0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
1f2b0 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
1f2c0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
1f2d0 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
1f2e0 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
1f2f0 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
1f300 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
1f310 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
1f320 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
1f330 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
1f340 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
1f350 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
1f360 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1f370 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
1f380 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
1f390 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
1f3a0 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
1f3b0 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
1f3c0 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
1f3d0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
1f3e0 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61  f the. * associa
1f3f0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
1f400 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
1f410 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1f420 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
1f430 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
1f440 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
1f450 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1f460 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65  *. * The "op" me
1f470 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1f480 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1f490 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1f4a0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1f4b0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1f4c0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1f4d0 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1f4e0 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1f4f0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
1f500 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
1f510 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
1f520 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
1f530 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
1f540 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
1f550 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
1f560 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
1f570 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1f580 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1f590 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
1f5a0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1f5c0 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
1f5d0 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
1f5e0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
1f5f0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1f600 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1f610 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1f620 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
1f630 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
1f640 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
1f650 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1f660 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
1f670 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1f680 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1f690 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
1f6a0 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
1f6b0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
1f6c0 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
1f6d0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1f6e0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1f6f0 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
1f700 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a  >) VALUES .... *
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1f720 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
1f730 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
1f740 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
1f750 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1f760 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
1f770 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1f780 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
1f790 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
1f7a0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1f7b0 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
1f7c0 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
1f7d0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1f7e0 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
1f7f0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1f800 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1f810 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1f820 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1f830 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1f840 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72  _UPDATE). * zTar
1f850 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
1f860 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1f870 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20  ble to update.. 
1f880 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
1f890 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1f8a0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
1f8b0 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
1f8c0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
1f8e0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1f8f0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
1f900 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
1f910 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
1f920 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
1f930 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
1f940 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
1f950 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
1f960 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
1f970 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
1f980 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
1f990 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
1f9a0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1f9b0 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
1f9c0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1f9d0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1f9e0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1f9f0 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
1fa00 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
1fa10 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1fa20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
1fa30 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
1fa40 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
1fa50 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
1fa60 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
1fa70 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
1fa80 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1fa90 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
1faa0 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
1fab0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
1fac0 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
1fad0 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
1fae0 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
1faf0 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
1fb00 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
1fb10 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1fb20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1fb30 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
1fb40 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1fb50 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
1fb60 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
1fb70 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
1fb80 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49  r UPDATE. */.  I
1fb90 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
1fba0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
1fbb0 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
1fbc0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1fbd0 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1fbe0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
1fbf0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
1fc00 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
1fc10 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
1fc20 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
1fc30 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
1fc40 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
1fc50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1fc60 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1fc70 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
1fc80 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
1fc90 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
1fca0 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
1fcb0 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
1fcc0 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
1fcd0 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
1fce0 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  icit..*/.typedef
1fcf0 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
1fd00 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
1fd10 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
1fd20 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1fd30 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
1fd40 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
1fd50 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
1fd60 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1fd70 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a   *pSchema;    /*
1fd80 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68   Fix items to th
1fd90 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
1fda0 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20  nt bVarOnly;    
1fdb0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
1fdc0 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
1fdd0 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f  ces only */.  co
1fde0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
1fdf0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
1fe00 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63  ll objects are c
1fe10 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73  ontained in this
1fe20 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
1fe30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
1fe40 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68  ;  /* Type of th
1fe50 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
1fe60 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
1fe70 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  sages */.  const
1fe80 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f   Token *pName; /
1fe90 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1fea0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1feb0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1fec0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
1fed0 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20  n objected used 
1fee0 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68  to accumulate th
1fef0 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69  e text of a stri
1ff00 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64  ng where we.** d
1ff10 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c  o not necessaril
1ff20 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74  y know how big t
1ff30 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62  he string will b
1ff40 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  e in the end..*/
1ff50 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d  .struct StrAccum
1ff60 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1ff70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
1ff80 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
1ff90 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
1ffa0 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
1ffb0 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20  char *zBase;    
1ffc0 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61       /* A base a
1ffd0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20  llocation.  Not 
1ffe0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a  from malloc. */.
1fff0 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20    char *zText;  
20000 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74         /* The st
20010 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73  ring collected s
20020 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20  o far */.  u32  
20030 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20  nChar;          
20040 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65  /* Length of the
20050 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a   string so far *
20060 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b  /.  u32  nAlloc;
20070 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
20080 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
20090 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
200a0 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63  /.  u32  mxAlloc
200b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
200c0 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
200d0 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
200e0 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
200f0 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f  /.  u8   accErro
20100 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41  r;       /* STRA
20110 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54  CCUM_NOMEM or ST
20120 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f  RACCUM_TOOBIG */
20130 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c  .  u8   printfFl
20140 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54  ags;    /* SQLIT
20150 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62  E_PRINTF flags b
20160 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69  elow */.};.#defi
20170 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  ne STRACCUM_NOME
20180 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54  M   1.#define ST
20190 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32  RACCUM_TOOBIG  2
201a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
201b0 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20  PRINTF_INTERNAL 
201c0 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61  0x01  /* Interna
201d0 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65  l-use-only conve
201e0 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f  rters allowed */
201f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
20200 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
20210 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e  0x02  /* SQL fun
20220 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20  ction arguments 
20230 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23  to VXPrintf */.#
20240 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
20250 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78  INTF_MALLOCED 0x
20260 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78  04  /* True if x
20270 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65  Text is allocate
20280 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66  d space */..#def
20290 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58  ine isMalloced(X
202a0 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66  )  (((X)->printf
202b0 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50  Flags & SQLITE_P
202c0 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21  RINTF_MALLOCED)!
202d0 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  =0).../*.** A po
202e0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
202f0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
20300 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
20310 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
20320 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
20330 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
20340 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
20350 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
20360 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
20370 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
20380 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
20390 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
203a0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
203b0 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
203c0 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
203d0 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
203e0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
203f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
20400 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
20410 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
20420 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
20430 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
20440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
20450 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
20460 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
20470 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
20480 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
20490 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
204a0 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
204b0 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
204c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
204d0 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
204e0 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
204f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
20500 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
20510 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
20520 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
20530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
20540 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
20550 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
20560 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
20570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20580 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
20590 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
205a0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
205b0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
205c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
205d0 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
205e0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
205f0 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
20620 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
20630 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
20640 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20660 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
20670 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
20680 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
20690 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
206a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
206b0 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
206c0 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
206d0 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
206e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
206f0 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
20700 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
20710 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
20720 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
20730 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
20740 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
20750 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
20760 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20780 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
20790 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
207a0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
207b0 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
207c0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
207d0 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
207e0 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
207f0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
20800 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
20810 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
20820 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
20830 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
20840 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
20850 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
20860 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
20870 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
20880 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208a0 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
208b0 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
208c0 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208e0 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
208f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
20900 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
20910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
20920 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
20930 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
20940 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
20950 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
20960 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
20970 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
20980 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
20990 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
209a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
209b0 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
209c0 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
209d0 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
209e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
209f0 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
20a00 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
20a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20a20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
20a30 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
20a40 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
20a50 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
20a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20a70 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
20a80 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
20a90 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20ab0 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
20ac0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
20ad0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
20ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
20af0 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
20b00 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
20b10 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
20b40 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
20b50 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
20b60 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
20b70 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
20b80 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
20b90 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
20ba0 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
20bb0 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
20bc0 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
20bd0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
20be0 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32  enabled */.  u32
20bf0 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20   szPma;         
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20c10 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72  * Maximum Sorter
20c20 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f   PMA size */.  /
20c30 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
20c40 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
20c50 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
20c60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
20c70 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
20c80 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
20c90 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
20ca0 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
20cd0 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
20ce0 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
20cf0 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
20d00 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
20d10 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
20d20 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
20d30 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
20d40 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
20d50 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
20d60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
20d70 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
20d80 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
20d90 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
20da0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20db0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
20dc0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
20dd0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
20de0 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20e00 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
20e10 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
20e20 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
20e30 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
20e40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20e50 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
20e60 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71  nitMutex */.  sq
20e70 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
20e80 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
20e90 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
20ea0 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
20eb0 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ize() */.  void 
20ec0 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
20ed0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
20ee0 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
20ef0 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
20f00 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
20f30 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
20f40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20f50 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76  NABLE_SQLLOG.  v
20f60 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f  oid(*xSqllog)(vo
20f70 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
20f80 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
20f90 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41    void *pSqllogA
20fa0 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  rg;.#endif.#ifde
20fb0 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f  f SQLITE_VDBE_CO
20fc0 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20  VERAGE.  /* The 
20fd0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61  following callba
20fe0 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29  ck (if not NULL)
20ff0 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65   is invoked on e
21000 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68  very VDBE branch
21010 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  .  ** operation.
21020 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61    Set the callba
21030 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ck using SQLITE_
21040 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f  TESTCTRL_VDBE_CO
21050 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76  VERAGE..  */.  v
21060 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63  oid (*xVdbeBranc
21070 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72  h)(void*,int iSr
21080 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
21090 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
210a0 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
210b0 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
210f0 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
21100 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21110 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
21120 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
21130 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
21140 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
21150 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
21160 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
21170 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
21180 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
21190 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
211a0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
211b0 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ls */.};../*.** 
211c0 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
211d0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
211e0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
211f0 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
21200 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
21210 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
21220 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
21230 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
21240 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
21250 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
21260 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
21270 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
21280 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
21290 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
212a0 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
212b0 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
212c0 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
212d0 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
212e0 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
212f0 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
21300 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
21310 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
21320 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
21330 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
21340 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
21350 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
21360 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
21370 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
21380 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
21390 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
213a0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
213b0 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
213c0 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
213d0 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
213e0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
213f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
21400 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
21410 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
21420 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
21430 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
21440 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
21450 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
21460 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
21470 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ker {.  Parse *p
21480 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214a0 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
214b0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28  ext.  */.  int (
214c0 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
214d0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
214e0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
214f0 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
21500 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
21510 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
21520 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
21530 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
21540 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
21550 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
21560 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
21570 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
21580 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
21590 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77  LECTs */.  int w
215a0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
215d0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
215e0 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20    u8 eCode;     
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
21610 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e   small processin
21620 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  g code */.  unio
21630 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21650 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
21660 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
21670 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
21680 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
21690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216a0 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
216b0 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
216c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216e0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e         /* A coun
216f0 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ter */.    int i
21700 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f        /* A curso
21730 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
21740 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
21750 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
21770 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
21780 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
21790 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
217a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
217b0 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
217c0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20  eferences */.   
217d0 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74   struct CCurHint
217e0 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20   *pCCurHint;    
217f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
21800 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f  sed by codeCurso
21810 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69  rHint() */.    i
21820 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20  nt *aiCol;      
21830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
21850 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
21860 65 78 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  exes */.  } u;.}
21870 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
21880 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
21890 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
218a0 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
218b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
218c0 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
218d0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
218e0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
218f0 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
21900 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
21910 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
21920 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
21930 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
21940 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
21950 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
21960 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
21970 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  prWalkNoop(Walke
21980 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a  r*, Expr*);../*.
21990 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
219a0 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
219b0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
219c0 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
219d0 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
219e0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
219f0 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
21a00 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
21a10 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
21a20 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
21a30 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
21a40 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
21a50 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
21a60 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
21a70 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
21a80 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
21a90 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
21aa0 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
21ab0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
21ac0 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
21ad0 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
21ae0 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
21af0 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
21b00 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
21b10 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
21b20 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
21b30 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
21b40 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
21b70 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
21b80 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
21b90 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
21ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
21bb0 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
21bc0 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
21bd0 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bf0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
21c00 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
21c10 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
21c20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
21c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c40 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
21c50 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
21c60 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
21c70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
21c80 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
21c90 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
21ca0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
21cb0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21cd0 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
21ce0 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
21cf0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
21d00 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  teErr;          
21d10 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
21d20 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
21d30 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
21d40 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
21d50 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21d60 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
21d70 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
21d80 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
21d90 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
21da0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
21db0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
21dc0 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
21dd0 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
21de0 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
21df0 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
21e00 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
21e10 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
21e20 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
21e30 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
21e40 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
21e50 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
21e60 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
21e70 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
21e80 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
21e90 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
21ea0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
21eb0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
21ec0 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
21ed0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
21ee0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
21ef0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
21f00 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
21f10 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
21f20 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
21f30 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
21f40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
21f50 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
21f80 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
21f90 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
21fb0 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
21fc0 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
21fd0 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
21fe0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22020 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
22030 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
22040 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
22050 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
22060 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
22070 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
22080 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
22090 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
220a0 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
220b0 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
220c0 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
220d0 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
220e0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
220f0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
22100 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
22110 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
22120 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
22130 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
22140 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
22150 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
22160 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
22170 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
22180 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
22190 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
221a0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
221b0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
221c0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
221d0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
221e0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
221f0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
22200 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
22210 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
22220 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
22230 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
22240 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
22250 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
22260 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
22270 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
22280 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
22290 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
222a0 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
222b0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  memError(int);.#
222c0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
222d0 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
222e0 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  3NomemError(__LI
222f0 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  NE__).# define S
22300 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
22310 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f  M_BKPT sqlite3Io
22320 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  errnomemError(__
22330 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20  LINE__).#else.# 
22340 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
22350 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
22360 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
22370 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
22380 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f  M_BKPT SQLITE_IO
22390 45 52 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66  ERR_NOMEM.#endif
223a0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
223b0 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
223c0 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
223d0 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
223e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
223f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22400 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
22410 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
22420 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
22430 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
22440 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
22450 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
22460 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
22470 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
22480 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
22490 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
224a0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
224b0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
224c0 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
224d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
224e0 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
224f0 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
22500 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22510 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
22520 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
22530 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
22540 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
22550 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
22560 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22570 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
22580 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
22590 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
225a0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
225b0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
225c0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
225d0 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
225e0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
225f0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
22600 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
22610 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
22620 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
22630 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22640 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
22650 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
22660 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
22670 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
22680 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
22690 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
226a0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
226b0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
226c0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
226d0 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
226e0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
226f0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
22700 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
22710 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
22720 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
22730 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
22740 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
22750 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
22760 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
22770 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22780 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
22790 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
227a0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
227b0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
227c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
227d0 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
227e0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
227f0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22800 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
22810 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
22820 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
22830 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
22840 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
22850 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22860 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
22870 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
22880 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22890 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
228a0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
228b0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
228c0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
228d0 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
228e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
228f0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
22900 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
22910 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22920 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
22930 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
22940 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
22950 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
22960 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
22970 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22980 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
22990 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
229a0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
229b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
229c0 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
229d0 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
229e0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
229f0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
22a00 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
22a10 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
22a20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22a30 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
22a40 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
22a50 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
22a60 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
22a70 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
22a80 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
22a90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22aa0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
22ab0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
22ac0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
22ad0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
22ae0 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
22af0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22b00 78 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  x)).#endif.#ifnd
22b10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
22b20 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
22b30 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  GS.int sqlite3Is
22b40 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64  IdChar(u8);.#end
22b50 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  if../*.** Intern
22b60 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
22b70 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71  otypes.*/.int sq
22b80 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e  lite3StrICmp(con
22b90 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
22ba0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
22bb0 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
22bc0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
22bd0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
22be0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
22bf0 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
22c00 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
22c10 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
22c20 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
22c30 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
22c40 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
22c50 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
22c60 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
22c70 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
22c80 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
22c90 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
22ca0 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
22cb0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
22cc0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
22cd0 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
22ce0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
22cf0 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
22d00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
22d10 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
22d20 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
22d30 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
22d40 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
22d50 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
22d60 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
22d70 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
22d80 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
22d90 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
22da0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
22db0 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
22dc0 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
22dd0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
22de0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
22df0 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
22e00 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
22e10 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
22e20 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
22e30 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
22e40 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c  lite3ScratchMall
22e50 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
22e60 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
22e70 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73  (void*);.void *s
22e80 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
22e90 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
22ea0 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
22eb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22ec0 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
22ed0 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
22ee0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22ef0 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
22f00 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
22f10 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
22f20 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
22f30 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
22f40 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
22f50 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
22f60 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
22f70 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
22f80 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
22f90 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
22fa0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
22fb0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
22fc0 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
22fd0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
22fe0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
22ff0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
23000 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
23010 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
23020 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
23030 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
23040 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
23050 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
23060 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
23070 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
23080 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
23090 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
230a0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
230b0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
230c0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
230d0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
230e0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
230f0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
23100 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
23110 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
23120 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
23130 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
23140 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
23150 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
23160 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
23170 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
23180 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
23190 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
231a0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
231b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
231c0 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
231d0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
231e0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
231f0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
23200 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
23210 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
23220 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
23230 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
23240 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
23250 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
23260 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
23270 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
23280 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
23290 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
232a0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
232b0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
232c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
232d0 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
232e0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
232f0 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
23300 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
23310 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
23320 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
23330 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
23340 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
23350 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
23360 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
23370 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
23380 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
23390 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
233a0 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
233b0 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
233c0 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
233d0 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
233e0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f  (SQLITE_MUTEX_NO
233f0 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  OP).  void sqlit
23400 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
23410 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
23420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
23430 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e  oryBarrier().#en
23440 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74  dif..sqlite3_int
23450 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  64 sqlite3Status
23460 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
23470 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70   sqlite3StatusUp
23480 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
23490 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f   sqlite3StatusDo
234a0 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  wn(int, int);.vo
234b0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
234c0 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69  Highwater(int, i
234d0 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  nt);../* Access 
234e0 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
234f0 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
23500 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
23510 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
23520 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
23530 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
23540 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
23550 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64  ex(void);..#ifnd
23560 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
23570 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
23580 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
23590 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
235a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
235b0 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
235c0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
235d0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
235e0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
235f0 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
23600 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
23610 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
23620 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
23630 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
23640 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
23650 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
23660 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
23670 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23690 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
236a0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
236b0 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
236c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
236d0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
236e0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
236f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
23700 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
23710 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
23720 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  */.};..void sqli
23730 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
23740 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
23750 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
23760 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
23770 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
23780 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
23790 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
237a0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
237b0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
237c0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
237d0 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
237e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
237f0 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
23800 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
23810 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
23820 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
23830 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
23840 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
23850 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
23860 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
23870 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
23880 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
23890 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
238a0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
238b0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
238c0 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
238d0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
238e0 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a  ewExpr(TreeView*
238f0 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75  , const Expr*, u
23900 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
23910 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
23920 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
23930 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
23940 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
23950 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
23960 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
23970 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
23980 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
23990 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
239a0 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
239b0 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
239c0 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
239d0 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
239e0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
239f0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
23a00 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
23a10 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
23a20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
23a30 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
23a40 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
23a50 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65  void sqlite3Toke
23a60 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61  nInit(Token*,cha
23a70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23a80 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
23a90 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
23aa0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23ab0 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
23ac0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
23ad0 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
23ae0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
23af0 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
23b00 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
23b10 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
23b20 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
23b30 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
23b40 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23b50 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
23b60 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
23b70 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
23b80 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
23b90 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
23ba0 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
23bb0 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45  Cache(Parse*);.E
23bc0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
23bd0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
23be0 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
23bf0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
23c00 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
23c10 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23c20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23c30 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
23c40 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
23c50 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
23c60 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
23c70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
23c80 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
23c90 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
23ca0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
23cb0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
23cc0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
23cd0 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
23ce0 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
23cf0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
23d00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
23d10 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
23d20 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
23d30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
23d40 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
23d50 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
23d60 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
23d70 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
23d80 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
23d90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23da0 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
23db0 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
23dc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23dd0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
23de0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
23df0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
23e00 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
23e10 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
23e20 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
23e30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23e40 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
23e50 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
23e60 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
23e70 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
23e80 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
23e90 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
23ea0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
23eb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
23ec0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
23ed0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
23ee0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
23ef0 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
23f00 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
23f10 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
23f20 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
23f30 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
23f40 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
23f50 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
23f60 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
23f70 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
23f80 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
23f90 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
23fa0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
23fb0 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
23fc0 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
23fd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23fe0 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
23ff0 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
24000 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24010 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
24020 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
24030 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
24040 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
24050 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
24060 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
24070 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
24080 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
24090 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
240a0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
240b0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
240c0 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
240d0 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
240e0 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
240f0 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
24100 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
24110 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
24120 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20  t,int,int);.#if 
24130 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
24140 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76  DDEN_COLUMNS.  v
24150 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
24160 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
24170 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
24180 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  mn*);.#else.# de
24190 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75  fine sqlite3Colu
241a0 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
241b0 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d  Name(T,C) /* no-
241c0 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69  op */.#endif.voi
241d0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
241e0 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
241f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24200 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
24210 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24220 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
24230 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
24240 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
24250 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24260 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
24270 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
24280 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24290 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
242a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
242b0 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
242c0 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
242d0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
242e0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
242f0 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
24300 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
24310 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
24320 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
24330 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
24340 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
24350 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
24360 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
24370 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
24390 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
243a0 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
243b0 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
243c0 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
243d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
243e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
243f0 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  Once(Parse *);..
24400 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
24410 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
24420 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24430 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
24440 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
24450 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
24460 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
24470 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
24480 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
24490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
244a0 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
244b0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
244c0 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e  e3BitvecTestNotN
244d0 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ull(Bitvec*, u32
244e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
244f0 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
24500 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
24510 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
24520 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
24530 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
24540 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
24550 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
24560 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
24570 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66  itvec*);.#ifndef
24580 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
24590 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71  LTIN_TEST.int sq
245a0 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
245b0 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
245c0 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74  ;.#endif..RowSet
245d0 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
245e0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  nit(sqlite3*, vo
245f0 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e  id*, unsigned in
24600 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24610 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53  RowSetClear(RowS
24620 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  et*);.void sqlit
24630 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52  e3RowSetInsert(R
24640 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e  owSet*, i64);.in
24650 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  t sqlite3RowSetT
24660 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74  est(RowSet*, int
24670 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69   iBatch, i64);.i
24680 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
24690 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  Next(RowSet*, i6
246a0 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  4*);..void sqlit
246b0 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72  e3CreateView(Par
246c0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
246d0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
246e0 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  t*,Select*,int,i
246f0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
24700 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
24710 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
24720 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
24730 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
24740 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
24750 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
24760 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
24770 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24780 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
24790 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
247a0 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  f..#if SQLITE_MA
247b0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
247c0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73  int sqlite3DbMas
247d0 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b  kAllZero(yDbMask
247e0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
247f0 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
24800 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
24810 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24820 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
24830 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
24840 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
24850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
24860 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
24870 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66  3*, Table*);.#if
24880 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24890 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
248a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
248b0 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
248c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
248d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
248e0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
248f0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
24900 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24910 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
24920 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
24930 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
24940 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
24950 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
24960 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
24970 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
24980 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
24990 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
249a0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
249b0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
249c0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
249d0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
249e0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
249f0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
24a00 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
24a10 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
24a20 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
24a30 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
24a40 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
24a50 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
24a60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
24a70 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
24a80 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
24a90 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
24aa0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
24ab0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
24ac0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
24ad0 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
24ae0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
24af0 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
24b30 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
24b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24b50 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
24b60 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
24b70 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
24b80 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
24b90 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a  tFuncArgs(Parse*
24ba0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
24bb0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
24bc0 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
24bd0 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
24be0 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
24bf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24c00 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
24c10 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
24c20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
24c30 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
24c40 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
24c50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24c60 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
24c70 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
24c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
24c90 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
24ca0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
24cb0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
24cc0 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
24cd0 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
24ce0 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65  nt,char**);.Inde
24cf0 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
24d00 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
24d10 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
24d20 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
24d30 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
24d60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24d70 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
24d80 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
24d90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
24da0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
24db0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
24dc0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
24dd0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
24de0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
24df0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
24e00 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
24e30 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
24e40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24e50 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
24e60 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
24e70 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
24e80 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
24e90 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
24ea0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
24eb0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
24ec0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
24ed0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
24ee0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
24ef0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
24f00 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
24f10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
24f20 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
24f30 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
24f40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
24f50 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
24f60 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
24f70 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
24f80 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
24f90 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
24fa0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
24fb0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
24fc0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
24fd0 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
24fe0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
24ff0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
25000 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
25010 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
25020 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
25030 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
25040 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
25050 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
25060 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
25070 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
25080 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
25090 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65  u64 sqlite3Where
250a0 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
250b0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
250c0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
250d0 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
250e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
250f0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
25100 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
25110 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
25120 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
25130 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
25140 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
25150 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
25160 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
25170 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
25180 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25190 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
251a0 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
251b0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
251c0 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
251d0 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
251e0 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
251f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
25200 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
25210 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
25220 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
25230 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
25240 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
25250 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
25260 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
25270 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
25280 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
25290 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
252a0 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
252b0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
252c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
252d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
252e0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
252f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
25300 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
25310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25320 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54  prCodeGetColumnT
25330 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62  oReg(Parse*, Tab
25340 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
25350 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25360 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
25370 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
25380 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
25390 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
253a0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
253b0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
253c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
253d0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
253e0 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
253f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25400 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
25410 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
25420 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25430 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
25440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25450 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
25460 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
25470 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25480 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
25490 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
254a0 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
254b0 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
254c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
254d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
254e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
254f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25500 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
25510 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
25520 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25530 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
25540 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
25550 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25560 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
25570 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
25580 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
25590 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
255a0 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
255b0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
255c0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
255d0 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
255e0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
255f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
25600 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
25610 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
25620 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
25630 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
25640 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
25650 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
25660 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
25670 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
25680 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
25690 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
256a0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
256b0 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
256c0 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
256d0 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64  tant terms */.#d
256e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
256f0 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20  L_REF      0x04 
25700 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74   /* Use ExprList
25710 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
25720 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
25730 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
25740 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
25750 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25760 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
25770 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
25780 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25790 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75  te3ExprIfFalseDu
257a0 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
257b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
257c0 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
257d0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
257e0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
257f0 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
25800 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
25810 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
25820 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
25830 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
25840 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
25850 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
25860 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
25870 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
25880 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
25890 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
258a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
258b0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
258c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
258d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
258e0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
258f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
25900 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
25910 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
25920 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
25930 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25940 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
25950 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
25960 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
25970 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
25980 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
25990 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
259a0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
259b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
259c0 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
259d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
259e0 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
259f0 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
25a00 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
25a10 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
25a20 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c  pliesExpr(Expr*,
25a30 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
25a40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
25a50 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
25a60 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
25a70 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
25a80 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
25a90 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
25aa0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
25ab0 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
25ac0 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
25ad0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
25ae0 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
25af0 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
25b00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25b10 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f  _BUILTIN_TEST.vo
25b20 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
25b30 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
25b40 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
25b50 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
25b60 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
25b70 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
25b80 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
25b90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
25ba0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
25bb0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
25bc0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
25bd0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
25be0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
25bf0 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
25c00 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
25c10 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
25c20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
25c30 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
25c40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
25c50 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
25c60 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
25c70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25c80 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
25c90 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
25ca0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
25cb0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
25cc0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
25cd0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
25ce0 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
25cf0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
25d00 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
25d10 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
25d20 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
25d30 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
25d40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25d50 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
25d60 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
25d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25d80 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74  rIsTableConstant
25d90 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66  (Expr*,int);.#if
25da0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25db0 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69  E_CURSOR_HINTS.i
25dc0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
25dd0 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45  ntainsSubquery(E
25de0 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  xpr*);.#endif.in
25df0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
25e00 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
25e10 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25e20 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
25e30 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
25e40 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
25e50 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
25e60 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
25e70 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
25e80 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
25e90 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25ea0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
25eb0 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  ete(.    Parse*,
25ec0 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
25ed0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
25ee0 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76  u8,u8,u8,int);.v
25ef0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
25f00 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
25f10 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
25f20 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
25f30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25f40 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
25f50 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
25f60 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
25f70 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69  t, int*,Index*,i
25f80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25f90 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
25fa0 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29  abel(Parse*,int)
25fb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
25fc0 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
25fd0 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
25fe0 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
25ff0 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69  u8,u8,int,int*,i
26030 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
26040 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
26050 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
26060 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
26070 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
26080 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
26090 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
260a0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
260b0 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38  int, u8, int, u8
260c0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
260d0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
260e0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
260f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
26100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
26110 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
26120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
26130 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
26140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
26150 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
26160 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
26170 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
26180 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
26190 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
261a0 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
261b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
261c0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
261d0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
261e0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
261f0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
26200 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
26210 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
26220 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
26230 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
26240 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
26250 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
26260 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
26270 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
26280 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
26290 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
262a0 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
262b0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
262c0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
262d0 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  ;.#if SELECTTRAC
262e0 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73  E_ENABLED.void s
262f0 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
26300 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73  ame(Select*,cons
26310 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
26320 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26330 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c  SelectSetName(A,
26340 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
26350 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c  qlite3InsertBuil
26360 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66  tinFuncs(FuncDef
26370 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
26380 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63  *sqlite3FindFunc
26390 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tion(sqlite3*,co
263a0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38  nst char*,int,u8
263b0 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
263c0 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
263d0 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  nFunctions(void)
263e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
263f0 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
26400 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
26410 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
26420 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e  terPerConnection
26430 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
26440 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
26450 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
26460 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
26470 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
26480 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
26490 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
264a0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
264b0 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
264c0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
264d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
264e0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
264f0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
26500 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
26510 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
26520 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
26530 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
26540 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
26550 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
26560 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
26570 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
26580 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
26590 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
265a0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
265d0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
265e0 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
265f0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
26600 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
26610 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
26620 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
26630 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
26640 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26650 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
26660 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
26670 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
26680 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
26690 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
266a0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
266b0 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
266c0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
266d0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
266e0 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
266f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26700 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
26710 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
26720 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
26730 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26750 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
26760 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
26770 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
26780 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
26790 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
267a0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
267b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
267c0 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
267d0 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
267e0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
267f0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
26800 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
26810 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
26820 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
26830 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
26840 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
26850 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
26860 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
26870 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
26880 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
26890 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
268a0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
268b0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
268e0 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
268f0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
26900 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
26910 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
26920 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
26930 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
26940 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
26950 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
26960 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
26970 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
26980 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
26990 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
269a0 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
269b0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
269c0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
269d0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
269e0 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
269f0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
26a00 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
26a10 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
26a20 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
26a30 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
26a40 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
26a50 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
26a60 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
26a70 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20  plevel : (p)).# 
26a80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
26a90 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
26aa0 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a  ->pToplevel==0).
26ab0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26ac0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
26ad0 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
26ae0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26af0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
26b00 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
26b10 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
26b20 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
26b30 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
26b40 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
26b50 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
26b60 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
26b70 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
26b80 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
26b90 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
26ba0 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
26bb0 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
26bc0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
26bd0 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
26be0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
26bf0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
26c00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26c10 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31  3IsToplevel(p) 1
26c20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26c30 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
26c40 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
26c50 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
26c60 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
26c70 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
26c80 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
26c90 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
26ca0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
26cb0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
26cc0 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
26cd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26ce0 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
26cf0 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
26d00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26d10 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
26d20 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
26d30 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
26d40 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
26d50 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
26d60 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
26d70 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
26d80 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
26d90 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
26da0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
26db0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
26dc0 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
26dd0 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
26de0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
26df0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
26e00 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
26e10 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26e20 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
26e30 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
26e40 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
26e50 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
26e60 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
26e70 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
26e80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
26e90 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
26ea0 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
26eb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26ec0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
26ed0 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
26ee0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
26ef0 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
26f00 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
26f10 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
26f20 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
26f30 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
26f40 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
26f50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
26f60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
26f70 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
26f80 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
26f90 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
26fa0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
26fb0 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
26fc0 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
26fd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26fe0 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
26ff0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
27000 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
27010 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
27020 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
27030 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
27040 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
27050 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
27060 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
27070 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
27080 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
27090 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
270a0 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
270b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
270c0 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
270d0 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
270e0 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
270f0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
27100 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
27110 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
27120 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
27130 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
27140 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
27150 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
27160 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
27170 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
27180 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
27190 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
271a0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
271b0 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
271c0 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
271d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
271e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
271f0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
27200 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
27210 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73  e);.#endif.u64 s
27220 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
27230 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a  t(LogEst);../*.*
27240 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
27250 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
27260 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
27270 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
27280 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
27290 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
272a0 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
272b0 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
272c0 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
272d0 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   file..*/.int sq
272e0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
272f0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
27300 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  64);.u8 sqlite3G
27310 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
27320 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
27330 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
27340 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
27350 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
27360 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
27370 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
27380 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
27390 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
273a0 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74   is for a varint
273b0 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20   to be a single 
273c0 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c  byte.  They foll
273d0 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20  owing.** macros 
273e0 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  handle the commo
273f0 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61  n case without a
27400 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c   procedure call,
27410 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a   but then call.*
27420 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  * the procedure 
27430 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e  for larger varin
27440 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  ts..*/.#define g
27450 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
27460 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
27470 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
27480 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
27490 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
274a0 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
274b0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
274c0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
274d0 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
274e0 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
274f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
27500 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
27510 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42  PutVarint((A),(B
27520 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
27530 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
27540 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
27550 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
27560 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
27570 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
27580 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
27590 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20  tyStr(sqlite3*, 
275a0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
275b0 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
275c0 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  ty(Vdbe*, Table*
275d0 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  , int);.char sql
275e0 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
275f0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
27600 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
27610 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
27620 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
27630 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
27640 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
27650 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
27660 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
27670 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
27680 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
27690 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
276a0 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
276b0 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
276c0 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
276d0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
276e0 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
276f0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
27700 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
27710 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
27720 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
27730 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
27740 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
27750 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
27760 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
27770 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
27780 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
27790 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
277a0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
277b0 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
277c0 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
277d0 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
277e0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
277f0 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
27800 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
27810 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
27820 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
27830 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
27840 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
27850 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
27860 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
27870 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
27880 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
27890 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
278a0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
278b0 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
278c0 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
278d0 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
278e0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
278f0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
27900 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
27910 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
27920 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
27930 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
27940 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
27950 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
27960 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
27970 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
27980 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
27990 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
279a0 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
279b0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
279c0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
279d0 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
279e0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
279f0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
27a00 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
27a10 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
27a20 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
27a30 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
27a40 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
27a50 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
27a60 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
27a70 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
27a80 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
27a90 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
27aa0 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
27ab0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27ac0 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
27ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
27ae0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
27af0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
27b00 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27b10 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
27b20 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
27b30 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
27b40 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
27b50 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
27b60 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
27b70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
27b80 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
27b90 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
27ba0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
27bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
27bc0 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
27bd0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
27be0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
27bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c00 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
27c10 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
27c20 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
27c30 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
27c40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
27c50 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
27c60 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
27c70 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
27c80 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
27c90 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
27ca0 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
27cb0 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
27cc0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
27cd0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
27ce0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
27cf0 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
27d00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
27d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
27d20 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
27d30 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
27d40 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
27d50 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
27d60 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
27d70 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
27d80 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
27d90 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
27da0 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71  rn const char sq
27db0 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d  lite3StrBINARY[]
27dc0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
27dd0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
27de0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
27df0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
27e00 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
27e10 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d  qlite3CtypeMap[]
27e20 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54  ;.extern const T
27e30 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54  oken sqlite3IntT
27e40 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20  okens[];.extern 
27e50 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63  SQLITE_WSD struc
27e60 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
27e70 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65  sqlite3Config;.e
27e80 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73  xtern FuncDefHas
27e90 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e  h sqlite3Builtin
27ea0 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
27eb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
27ec0 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
27ed0 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
27ee0 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
27ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
27f00 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
27f10 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
27f20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27f30 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
27f40 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
27f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
27f60 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
27f70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
27f80 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
27f90 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
27fa0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
27fb0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
27fc0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
27fd0 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
27fe0 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
27ff0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
28000 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
28010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28020 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
28030 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
28040 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
28050 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
28060 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
28070 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28080 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
28090 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
280a0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
280b0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
280c0 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
280d0 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
280e0 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
280f0 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
28100 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
28110 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
28120 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
28130 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
28140 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
28150 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
28160 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
28170 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
28180 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
28190 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
281a0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
281b0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
281c0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
281d0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
281e0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
281f0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
28200 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
28210 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
28220 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
28230 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
28240 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
28250 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
28260 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
28270 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28280 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
28290 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
282a0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
282b0 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
282c0 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
282d0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
282e0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
282f0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
28300 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
28310 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
28320 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61  te3GetCollSeq(Pa
28330 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65  rse*, u8, CollSe
28340 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  q *, const char*
28350 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41  );.char sqlite3A
28360 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73  ffinityType(cons
28370 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76  t char*, u8*);.v
28380 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
28390 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ze(Parse*, Token
283a0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
283b0 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
283c0 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
283d0 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dler*);.int sqli
283e0 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
283f0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
28400 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
28410 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
28420 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
28430 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
28440 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
28450 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
28460 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
28470 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
28480 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
28490 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
284a0 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
284b0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
284c0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
284d0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
284e0 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
284f0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
28500 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
28510 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28520 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
28530 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
28540 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
28550 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
28560 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
28570 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
28580 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
28590 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
285a0 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
285b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
285c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
285d0 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
285e0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
285f0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
28600 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
28610 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
28620 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
28630 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
28640 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
28650 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
28660 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
28670 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
28680 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
28690 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
286a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
286b0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
286c0 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  *,.  void (*)(sq
286d0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
286e0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
286f0 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
28700 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
28710 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
28720 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
28730 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
28740 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
28750 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
28760 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  or.);.void sqlit
28770 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74  e3OomFault(sqlit
28780 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
28790 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74  e3OomClear(sqlit
287a0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
287b0 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
287c0 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
287d0 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
287e0 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
287f0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
28800 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
28810 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ccum*, sqlite3*,
28820 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
28830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28840 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
28850 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
28860 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
28870 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
28880 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d  pendAll(StrAccum
28890 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
288a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65  void sqlite3Appe
288b0 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a  ndChar(StrAccum*
288c0 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72  ,int,char);.char
288d0 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
288e0 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
288f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28900 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
28910 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
28920 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
28930 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
28940 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
28950 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
28960 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
28970 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
28980 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
28990 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
289a0 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
289b0 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
289c0 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
289d0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
289e0 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
289f0 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  8 *);..#ifdef SQ
28a00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
28a10 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
28a20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
28a30 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
28a40 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
28a50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72  robeSetValue(Par
28a60 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63  se*,Index*,Unpac
28a70 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72  kedRecord**,Expr
28a80 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  *,u8,int,int*);.
28a90 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
28aa0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
28ab0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
28ac0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
28ad0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28ae0 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
28af0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
28b00 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
28b10 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
28b20 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
28b30 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
28b40 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66  value**);.#endif
28b50 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
28b60 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
28b70 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
28b80 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
28b90 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
28ba0 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
28bb0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
28bc0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
28bd0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
28be0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
28bf0 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
28c00 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
28c10 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
28c20 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
28c30 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
28c40 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
28c50 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
28c60 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
28c70 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
28c80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28c90 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
28ca0 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
28cb0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
28cc0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
28cd0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28ce0 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
28cf0 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
28d00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28d10 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
28d20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
28d30 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
28d40 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
28d50 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
28d60 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
28d70 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
28d80 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
28d90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
28da0 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
28db0 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
28dc0 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
28dd0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
28de0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
28df0 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
28e00 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
28e10 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
28e20 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
28e30 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
28e40 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
28e50 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
28e60 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
28e70 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
28e80 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
28e90 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
28ea0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
28eb0 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  Lock(X).#  defin
28ec0 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
28ed0 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
28ee0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
28ef0 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
28f00 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
28f10 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
28f20 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
28f30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
28f40 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
28f50 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
28f60 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
28f70 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
28f80 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
28f90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
28fa0 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
28fb0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
28fc0 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
28fd0 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
28fe0 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
28ff0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
29000 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
29010 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
29020 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
29030 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
29040 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
29050 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
29060 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
29070 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
29080 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
29090 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
290a0 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
290b0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
290c0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
290d0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
290e0 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
290f0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
29100 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
29110 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
29120 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
29130 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
29140 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
29150 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
29160 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
29170 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
29180 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
29190 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
291a0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
291b0 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
291c0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
291d0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
291e0 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
291f0 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
29200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
29210 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
29220 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
29230 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
29240 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
29250 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
29260 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
29270 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
29280 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
29290 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
292a0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
292b0 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
292c0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
292d0 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
292e0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
292f0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
29300 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
29310 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
29320 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
29330 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
29340 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
29350 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
29360 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
29370 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
29380 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
29390 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
293a0 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
293b0 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
293c0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
293d0 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
293e0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
293f0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
29400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29410 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
29420 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
29430 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
29440 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
29450 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
29460 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
29470 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
29480 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
29490 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
294a0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
294b0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
294c0 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
294d0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
294e0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
294f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29500 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
29510 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
29520 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
29530 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
29540 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
29550 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
29560 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
29570 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
29580 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
29590 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
295a0 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
295b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
295c0 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
295d0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
295e0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
295f0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
29600 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
29610 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
29620 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
29630 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
29640 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
29650 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
29660 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
29670 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
29680 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
29690 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
296a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
296b0 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
296c0 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
296d0 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
296e0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
296f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
29700 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
29710 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
29720 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
29730 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
29740 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
29750 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
29760 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
29770 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
29780 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
29790 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
297a0 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
297b0 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
297c0 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
297d0 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
297e0 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
297f0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
29800 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
29810 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
29820 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
29830 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
29840 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
29850 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
29860 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
29870 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
29880 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
29890 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
298a0 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
298b0 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
298c0 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
298d0 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
298e0 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70  ionality is.** p
298f0 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
29900 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
29910 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
29920 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
29930 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
29940 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29950 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
29960 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
29970 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29980 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
29990 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
299a0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
299b0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
299c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
299d0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
299e0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
299f0 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
29a00 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
29a10 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
29a20 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
29a30 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
29a40 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
29a50 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
29a60 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
29a70 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
29a80 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
29a90 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
29aa0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
29ab0 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
29ac0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
29ad0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
29ae0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
29af0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
29b00 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
29b10 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29b20 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
29b30 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
29b40 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
29b50 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
29b60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
29b70 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
29b80 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
29b90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29ba0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
29bb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
29bc0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
29bd0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
29be0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
29bf0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
29c00 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
29c10 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
29c20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29c30 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
29c40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
29c50 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
29c60 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
29c70 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
29c80 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
29c90 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
29ca0 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
29cb0 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
29cc0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
29cd0 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
29ce0 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
29cf0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
29d00 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
29d10 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
29d20 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
29d30 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
29d40 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
29d50 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
29d60 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
29d70 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
29d80 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
29d90 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
29da0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
29db0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
29dc0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
29dd0 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
29de0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
29df0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
29e00 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
29e10 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
29e20 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
29e30 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
29e40 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
29e50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
29e60 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
29e70 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
29e80 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
29e90 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
29ea0 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
29eb0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
29ec0 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
29ed0 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
29ee0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
29ef0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
29f00 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
29f10 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
29f20 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
29f30 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
29f40 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
29f50 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
29f60 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
29f70 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
29f80 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
29f90 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
29fa0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
29fb0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
29fc0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
29fd0 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
29fe0 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
29ff0 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
2a000 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
2a010 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
2a020 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
2a030 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
2a040 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
2a050 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
2a060 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
2a070 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
2a080 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
2a090 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2a0a0 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
2a0b0 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
2a0c0 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
2a0d0 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
2a0e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2a0f0 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
2a100 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
2a110 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
2a120 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
2a130 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2a140 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
2a150 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
2a160 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2a170 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2a180 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
2a190 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2a1a0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2a1b0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
2a1c0 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
2a1d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
2a1e0 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
2a1f0 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
2a200 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2a210 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2a220 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
2a230 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
2a240 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
2a250 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
2a260 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
2a270 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
2a280 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
2a290 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2a2a0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
2a2b0 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
2a2c0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
2a2d0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
2a2e0 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
2a2f0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
2a300 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
2a310 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
2a320 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2a330 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
2a340 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
2a350 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
2a360 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
2a370 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
2a380 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
2a390 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2a3a0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
2a3b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2a3c0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2a3d0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
2a3e0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2a3f0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2a400 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
2a410 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2a420 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
2a430 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
2a440 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
2a450 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
2a460 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
2a470 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
2a480 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
2a490 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
2a4a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2a4b0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
2a4c0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
2a4d0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2a4e0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2a4f0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
2a500 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a510 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2a520 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2a530 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2a540 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2a550 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
2a560 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2a570 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2a580 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
2a590 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2a5a0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
2a5b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2a5c0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2a5d0 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
2a5e0 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
2a5f0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
2a600 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
2a610 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
2a620 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
2a630 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
2a640 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
2a650 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
2a660 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
2a670 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
2a680 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
2a690 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
2a6a0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2a6b0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
2a6c0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
2a6d0 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
2a6e0 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
2a6f0 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
2a700 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2a710 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
2a720 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
2a730 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
2a740 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2a750 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2a760 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
2a770 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
2a780 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
2a790 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2a7a0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
2a7b0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
2a7c0 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
2a7d0 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
2a7e0 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
2a7f0 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
2a800 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
2a810 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
2a820 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
2a830 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
2a840 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
2a850 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
2a860 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
2a870 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
2a880 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2a890 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
2a8a0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
2a8b0 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
2a8c0 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
2a8d0 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
2a8e0 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
2a8f0 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
2a900 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
2a910 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
2a920 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2a930 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
2a940 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
2a950 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2a960 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2a970 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2a980 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2a990 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2a9a0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2a9b0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2a9c0 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
2a9d0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
2a9e0 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2a9f0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
2aa00 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2aa10 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
2aa20 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
2aa30 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2aa40 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2aa50 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2aa60 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2aa70 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2aa80 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2aa90 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
2aaa0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
2aab0 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
2aac0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2aad0 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
2aae0 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
2aaf0 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
2ab00 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
2ab10 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2ab20 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
2ab30 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
2ab40 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
2ab50 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
2ab60 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
2ab70 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
2ab80 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
2ab90 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
2aba0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
2abb0 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
2abc0 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
2abd0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2abe0 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
2abf0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
2ac00 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
2ac10 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
2ac20 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2ac30 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
2ac40 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
2ac50 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
2ac60 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
2ac70 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2ac80 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
2ac90 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
2aca0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
2acb0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
2acc0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
2acd0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
2ace0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
2acf0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
2ad00 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
2ad10 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
2ad20 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
2ad30 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2ad40 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
2ad50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2ad60 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
2ad70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2ad80 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
2ad90 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2ada0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2adb0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
2adc0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2add0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2ade0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
2adf0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
2ae00 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2ae10 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
2ae20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ae30 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2ae40 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
2ae50 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2ae60 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
2ae70 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
2ae80 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2ae90 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2aea0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
2aeb0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
2aec0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
2aed0 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
2aee0 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
2aef0 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
2af00 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
2af10 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2af20 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
2af30 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
2af40 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
2af50 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
2af60 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
2af70 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
2af80 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
2af90 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
2afa0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
2afb0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
2afc0 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
2afd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2afe0 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
2aff0 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
2b000 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
2b010 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2b020 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
2b030 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2b040 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
2b050 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
2b060 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
2b070 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51  f..#endif /* _SQ
2b080 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a        LITEINT_H_ */.