/ Hex Artifact Content
Login

Artifact 49cd2b5cd07cca7c462608540cb6dfa8ab03ba89:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
19a0: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
19b0: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
19c0: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
19d0: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
19e0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
19f0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1a00: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1a10: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
1a20: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
1a30: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
1a40: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
1a50: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
1a60: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1a70: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1a80: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1a90: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1aa0: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1ab0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
1ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
1ad0: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
1ae0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
1af0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
1b00: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
1b10: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
1b20: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
1b30: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
1b40: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
1b50: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
1b60: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1b70: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1b80: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
1b90: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1ba0: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1bb0: 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  300.#    if !def
1bc0: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
1bd0: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
1be0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
1bf0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1c00: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
1c10: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
1c20: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
1c30: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
1c40: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
1c50: 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74 65  insic(_ReadWrite
1c60: 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65 6c  Barrier).#    el
1c70: 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64  se.#      includ
1c80: 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a  e <cmnintrin.h>.
1c90: 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6e  #    endif.#  en
1ca0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  dif.#endif../*.*
1cb0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52  * The SQLITE_THR
1cc0: 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75  EADSAFE macro mu
1cd0: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73  st be defined as
1ce0: 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20   0, 1, or 2..** 
1cf0: 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20  0 means mutexes 
1d00: 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20  are permanently 
1d10: 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20  disable and the 
1d20: 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72  library is never
1d30: 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20  .** threadsafe. 
1d40: 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62   1 means the lib
1d50: 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a  rary is serializ
1d60: 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ed which is the 
1d70: 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c  highest.** level
1d80: 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79   of threadsafety
1d90: 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  2 means the l
1da0: 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74  ibrary is multit
1db0: 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70  hreaded - multip
1dc0: 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61  le.** threads ca
1dd0: 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20  n use SQLite as 
1de0: 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74  long as no two t
1df0: 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73  hreads try to us
1e00: 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61  e the same.** da
1e10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1e20: 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  n at the same ti
1e30: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20  me..**.** Older 
1e40: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1e50: 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f  te used an optio
1e60: 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d  nal THREADSAFE m
1e70: 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70  acro..** We supp
1e80: 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67  ort that for leg
1e90: 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  acy..*/.#if !def
1ea0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45  ined(SQLITE_THRE
1eb0: 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66  ADSAFE).# if def
1ec0: 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29  ined(THREADSAFE)
1ed0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
1ee0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1ef0: 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a  READSAFE.# else.
1f00: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1f10: 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f  E_THREADSAFE 1 /
1f20: 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32  * IMP: R-07272-2
1f30: 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a  2309 */.# endif.
1f40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f  #endif../*.** Po
1f50: 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74  wersafe overwrit
1f60: 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75  e is on by defau
1f70: 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20  lt.  But can be 
1f80: 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67  turned off using
1f90: 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45  .** the -DSQLITE
1fa0: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1fb0: 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c  RITE=0 command-l
1fc0: 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23  ine option..*/.#
1fd0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f  ifndef SQLITE_PO
1fe0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1ff0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
2000: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
2010: 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a  WRITE 1.#endif..
2020: 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f  /*.** EVIDENCE-O
2030: 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32  F: R-25715-37072
2040: 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   Memory allocati
2050: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72  on statistics ar
2060: 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20  e enabled by.** 
2070: 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53  default unless S
2080: 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
2090: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45  d with SQLITE_DE
20a0: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d  FAULT_MEMSTATUS=
20b0: 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61  0 in.** which ca
20c0: 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  se memory alloca
20d0: 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  tion statistics 
20e0: 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20  are disabled by 
20f0: 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20  default..*/.#if 
2100: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2110: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
2120: 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  S).# define SQLI
2130: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
2140: 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  ATUS 1.#endif../
2150: 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65  *.** Exactly one
2160: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2170: 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65  g macros must be
2180: 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65   defined in orde
2190: 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20  r to.** specify 
21a0: 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c  which memory all
21b0: 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65  ocation subsyste
21c0: 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  m to use..**.** 
21d0: 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45      SQLITE_SYSTE
21e0: 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  M_MALLOC        
21f0: 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20    // Use normal 
2200: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
2210: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49  **     SQLITE_WI
2220: 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  N32_MALLOC      
2230: 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33       // Use Win3
2240: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50  2 native heap AP
2250: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
2260: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  ZERO_MALLOC     
2270: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20         // Use a 
2280: 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74  stub allocator t
2290: 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73  hat always fails
22a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d  .**     SQLITE_M
22b0: 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20  EMDEBUG         
22c0: 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69        // Debuggi
22d0: 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79  ng version of sy
22e0: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
22f0: 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20  .** On Windows, 
2300: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49  if the SQLITE_WI
2310: 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44  N32_MALLOC_VALID
2320: 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ATE macro is def
2330: 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20  ined and the.** 
2340: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69  assert() macro i
2350: 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20  s enabled, each 
2360: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69  call into the Wi
2370: 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20  n32 native heap 
2380: 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c  subsystem.** wil
2390: 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69  l cause HeapVali
23a0: 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65  date to be calle
23b0: 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69  d.  If heap vali
23c0: 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61  dation should fa
23d0: 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74  il, an.** assert
23e0: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67  ion will be trig
23f0: 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  gered..**.** If 
2400: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
2410: 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74  e are defined, t
2420: 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53  hen set SQLITE_S
2430: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a  YSTEM_MALLOC as.
2440: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  ** the default..
2450: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
2460: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2470: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2480: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2490: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
24a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
24b0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
24c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
24d0: 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72  EMDEBUG)>1.# err
24e0: 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20  or "Two or more 
24f0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
2500: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
2510: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
2520: 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65  ons\. are define
2530: 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e  d but at most on
2540: 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20  e is allowed:\. 
2550: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2560: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e  LLOC, SQLITE_WIN
2570: 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  32_MALLOC, SQLIT
2580: 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51  E_MEMDEBUG,\. SQ
2590: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
25a0: 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ".#endif.#if def
25b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
25c0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
25d0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
25e0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
25f0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2600: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
2610: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2620: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d  LITE_MEMDEBUG)==
2630: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
2640: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2650: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2660: 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  If SQLITE_MALLOC
2670: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e  _SOFT_LIMIT is n
2680: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72  ot zero, then tr
2690: 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a  y to keep the.**
26a0: 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79   sizes of memory
26b0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c   allocations bel
26c0: 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68  ow this value wh
26d0: 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f  ere possible..*/
26e0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26f0: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2700: 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65  _LIMIT).# define
2710: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
2720: 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23  OFT_LIMIT 1024.#
2730: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20  endif../*.** We 
2740: 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f  need to define _
2750: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20  XOPEN_SOURCE as 
2760: 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72  follows in order
2770: 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65   to enable.** re
2780: 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20  cursive mutexes 
2790: 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73  on most Unix sys
27a0: 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28  tems and fchmod(
27b0: 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a  ) on OpenBSD..**
27c0: 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52   But _XOPEN_SOUR
27d0: 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73  CE define causes
27e0: 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61   problems for Ma
27f0: 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a  c OS X, so omit.
2800: 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64  ** it..*/.#if !d
2810: 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f  efined(_XOPEN_SO
2820: 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65  URCE) && !define
2830: 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26  d(__DARWIN__) &&
2840: 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   !defined(__APPL
2850: 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f  E__).#  define _
2860: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30  XOPEN_SOURCE 600
2870: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e  .#endif../*.** N
2880: 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45  DEBUG and SQLITE
2890: 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73  _DEBUG are oppos
28a0: 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64  ites.  It should
28b0: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
28c0: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28  that.** defined(
28d0: 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65  NDEBUG)==!define
28e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e  d(SQLITE_DEBUG).
28f0: 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74    If this is not
2900: 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c   currently true,
2910: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65  .** make it true
2920: 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20   by defining or 
2930: 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55  undefining NDEBU
2940: 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67  G..**.** Setting
2950: 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68   NDEBUG makes th
2960: 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61  e code smaller a
2970: 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73  nd faster by dis
2980: 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73  abling the.** as
2990: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
29a0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
29b0: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
29c0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
29d0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
29e0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
29f0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
2a00: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
2a10: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
2a20: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
2a30: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
2a40: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
2a50: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
2a60: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
2a70: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
2a80: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2a90: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2aa0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2ab0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2ac0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2ad0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2ae0: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2af0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2b00: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2b10: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2b20: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2b30: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2b40: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2b50: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2b60: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2b70: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2b80: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2b90: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2ba0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2bb0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2bc0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2bd0: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2be0: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2bf0: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2c00: 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72  n.** doing cover
2c10: 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65  age testing, the
2c20: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64   condition insid
2c30: 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  e the argument t
2c40: 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20  o.** testcase() 
2c50: 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65  must be evaluate
2c60: 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20  d both true and 
2c70: 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74  false in order t
2c80: 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72  o.** get full br
2c90: 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20  anch coverage.  
2ca0: 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d  The testcase() m
2cb0: 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64  acro is inserted
2cc0: 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75  .** to help ensu
2cd0: 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74  re adequate test
2ce0: 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61   coverage in pla
2cf0: 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65  ces where simple
2d00: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65  .** condition/de
2d10: 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20  cision coverage 
2d20: 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20  is inadequate.  
2d30: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73  For example, tes
2d40: 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62  tcase().** can b
2d50: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
2d60: 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c  ure boundary val
2d70: 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20  ues are tested. 
2d80: 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20   For.** bitmask 
2d90: 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28  tests, testcase(
2da0: 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ) can be used to
2db0: 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20   make sure each 
2dc0: 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66  bit.** is signif
2dd0: 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61  icant and used a
2de0: 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f  t least once.  O
2df0: 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  n switch stateme
2e00: 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c  nts.** where mul
2e10: 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74  tiple cases go t
2e20: 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b  o the same block
2e30: 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61   of code, testca
2e40: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75  se().** can insu
2e50: 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65  re that all case
2e60: 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e  s are evaluated.
2e70: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
2e80: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2e90: 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
2ea0: 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a  3Coverage(int);.
2eb0: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
2ec0: 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73  e(X)  if( X ){ s
2ed0: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f  qlite3Coverage(_
2ee0: 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73  _LINE__); }.#els
2ef0: 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  e.# define testc
2f00: 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ase(X).#endif../
2f10: 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c  *.** The TESTONL
2f20: 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  Y macro is used 
2f30: 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61  to enclose varia
2f40: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
2f50: 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74   or.** other bit
2f60: 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61  s of code that a
2f70: 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70  re needed to sup
2f80: 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e  port the argumen
2f90: 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73  ts.** within tes
2fa0: 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65  tcase() and asse
2fb0: 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a  rt() macros..*/.
2fc0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  #if !defined(NDE
2fd0: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
2fe0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
2ff0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54  TEST).# define T
3000: 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  ESTONLY(X)  X.#e
3010: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53  lse.# define TES
3020: 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  TONLY(X).#endif.
3030: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73  ./*.** Sometimes
3040: 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c   we need a small
3050: 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20   amount of code 
3060: 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62  such as a variab
3070: 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
3080: 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f  n.** to setup fo
3090: 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74  r a later assert
30a0: 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57  () statement.  W
30b0: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68  e do not want th
30c0: 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70  is code to.** ap
30d0: 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74  pear when assert
30e0: 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20  () is disabled. 
30f0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
3100: 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72  acro is therefor
3110: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e  e.** used to con
3120: 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20  tain that setup 
3130: 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22  code.  The "VVA"
3140: 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20   acronym stands 
3150: 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61  for.** "Verifica
3160: 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
3170: 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  , and Accreditat
3180: 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20  ion".  In other 
3190: 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f  words, the.** co
31a0: 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e  de within VVA_ON
31b0: 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72  LY() will only r
31c0: 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69  un during verifi
31d0: 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73  cation processes
31e0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45  ..*/.#ifndef NDE
31f0: 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41  BUG.# define VVA
3200: 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  _ONLY(X)  X.#els
3210: 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  e.# define VVA_O
3220: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
3230: 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20  *.** The ALWAYS 
3240: 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73  and NEVER macros
3250: 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61   surround boolea
3260: 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68  n expressions wh
3270: 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ich.** are inten
3280: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
3290: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
32a0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
32b0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
32c0: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
32d0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
32e0: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
32f0: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
3300: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
3310: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
3320: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
3330: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
3340: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
3350: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
3360: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
3370: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
3380: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
3390: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
33a0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
33b0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
33c0: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
33d0: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
33e0: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
33f0: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
3400: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
3410: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
3420: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
3430: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
3440: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
3450: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3460: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
3470: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
3480: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
3490: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
34a0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
34b0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
34c0: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
34d0: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
34e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
34f0: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3500: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3510: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3520: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3530: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3540: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3550: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
3560: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
3570: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
3580: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3590: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
35a0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
35b0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
35c0: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
35d0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
35e0: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
35f0: 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66  ** Some malloc f
3600: 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c 79  ailures are only
3610: 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51 4c   possible if SQL
3620: 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43  ITE_TEST_REALLOC
3630: 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64 65  _STRESS is.** de
3640: 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64 20  fined.  We need 
3650: 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e 73  to defend agains
3660: 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65 73  t those failures
3670: 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77 69   when testing wi
3680: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 53  th.** SQLITE_TES
3690: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
36a0: 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20 77  , but we don't w
36b0: 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68 61  ant the unreacha
36c0: 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a 20  ble branches.** 
36d0: 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c 20  during a normal 
36e0: 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c 6c  build.  The foll
36f0: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e 20  owing macro can 
3700: 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61 62  be used to disab
3710: 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61 74  le tests.** that
3720: 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c 73   are always fals
3730: 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53 51  e except when SQ
3740: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3750: 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74 2e  C_STRESS is set.
3760: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3770: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
3780: 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64 65  LOC_STRESS).# de
3790: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
37a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
37b0: 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (X).#elif !defin
37c0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
37d0: 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  ine ONLY_IF_REAL
37e0: 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28  LOC_STRESS(X)  (
37f0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
3800: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
3810: 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  ine ONLY_IF_REAL
3820: 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28  LOC_STRESS(X)  (
3830: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
3840: 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75 73   Declarations us
3850: 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20 74  ed for tracing t
3860: 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  he operating sys
3870: 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  tem interfaces..
3880: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3890: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f 54  QLITE_FORCE_OS_T
38a0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
38b0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
38c0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
38d0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
38e0: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
38f0: 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
3900: 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20 64  ite3OSTrace;.# d
3910: 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29  efine OSTRACE(X)
3920: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 71            if( sq
3930: 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20 73  lite3OSTrace ) s
3940: 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
3950: 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  f X.# define SQL
3960: 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
3970: 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  E.#else.# define
3980: 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75 6e   OSTRACE(X).# un
3990: 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56 45  def  SQLITE_HAVE
39a0: 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69 66  _OS_TRACE.#endif
39b0: 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20 73  ../*.** Is the s
39c0: 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29 20  qlite3ErrName() 
39d0: 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64 20  function needed 
39e0: 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20 43  in the build?  C
39f0: 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20  urrently,.** it 
3a00: 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d 75  is needed by "mu
3a10: 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65 6e  tex_w32.c" (when
3a20: 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f 73   debugging), "os
3a30: 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a 2a  _win.c" (when.**
3a40: 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61 62   OSTRACE is enab
3a50: 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65 76  led), and by sev
3a60: 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20 66  eral "test*.c" f
3a70: 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65 0a  iles (which are.
3a80: 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e  ** compiled usin
3a90: 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e 0a  g SQLITE_TEST)..
3aa0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3ab0: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3ac0: 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  ACE) || defined(
3ad0: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
3ae0: 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
3af0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
3b00: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 23  SQLITE_OS_WIN).#
3b10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
3b20: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6c  EED_ERR_NAME.#el
3b30: 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49  se.# undef  SQLI
3b40: 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
3b50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
3b60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
3b70: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 73  LAIN_COMMENTS is
3b80: 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77 69   incompatible wi
3b90: 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  th SQLITE_OMIT_E
3ba0: 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65 66  XPLAIN.*/.#ifdef
3bb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
3bc0: 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51 4c  LAIN.# undef SQL
3bd0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3be0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64  IN_COMMENTS.#end
3bf0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
3c00: 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29   true (non-zero)
3c10: 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69 73   if the input is
3c20: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
3c30: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a   is too large.**
3c40: 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69   to fit in 32-bi
3c50: 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  ts.  This macro 
3c60: 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
3c70: 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63 61  f various testca
3c80: 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74  se().** macros t
3c90: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65  o verify that we
3ca0: 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51 4c   have tested SQL
3cb0: 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69  ite for large-fi
3cc0: 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23  le support..*/.#
3cd0: 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e  define IS_BIG_IN
3ce0: 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69 36  T(X)  (((X)&~(i6
3cf0: 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d 30  4)0xffffffff)!=0
3d00: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63  )../*.** The mac
3d10: 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73  ro unlikely() is
3d20: 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72   a hint that sur
3d30: 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e  rounds a boolean
3d40: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74  .** expression t
3d50: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66  hat is usually f
3d60: 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b  alse.  Macro lik
3d70: 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a  ely() surrounds.
3d80: 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ** a boolean exp
3d90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
3da0: 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 54  usually true.  T
3db0: 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c 64  hese hints could
3dc0: 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c 20  ,.** in theory, 
3dd0: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 63  be used by the c
3de0: 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65 72  ompiler to gener
3df0: 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c  ate better code,
3e00: 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   but.** currentl
3e10: 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74 20  y they are just 
3e20: 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75 6d  comments for hum
3e30: 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a 23  an readers..*/.#
3e40: 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29  define likely(X)
3e50: 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65 20      (X).#define 
3e60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58 29  unlikely(X)  (X)
3e70: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ..#include "hash
3e80: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
3e90: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
3ea0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
3eb0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
3ec0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
3ed0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
3ee0: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
3ef0: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
3f00: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
3f10: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
3f20: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
3f30: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
3f40: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
3f50: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
3f60: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
3f70: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3f80: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
3f90: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
3fa0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3fb0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
3fc0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
3fd0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
3fe0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
3ff0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
4000: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
4010: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
4020: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
4030: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
4040: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4050: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
4060: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
4070: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
4080: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
4090: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
40a0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
40b0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
40c0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
40d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
40e0: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
40f0: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
4100: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
4110: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
4120: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
4130: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
4140: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
4150: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
4160: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
4170: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
4180: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
4190: 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64  r.** to omit cod
41a0: 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74  e used by TEMP t
41b0: 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65  ables without me
41c0: 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74  ssy #ifndef stat
41d0: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65  ements..*/.#ifde
41e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
41f0: 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49  MPDB.#define OMI
4200: 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65  T_TEMPDB 1.#else
4210: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
4220: 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  MPDB 0.#endif../
4230: 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66  *.** The "file f
4240: 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73  ormat" number is
4250: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
4260: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
4270: 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20  whenever.** the 
4280: 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20  VDBE-level file 
4290: 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20  format changes. 
42a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
42b0: 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65  acros define the
42c0: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20  .** the default 
42d0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  file format for 
42e0: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e  new databases an
42f0: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69  d the maximum fi
4300: 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61  le format.** tha
4310: 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61  t the library ca
4320: 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69  n read..*/.#defi
4330: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49  ne SQLITE_MAX_FI
4340: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e  LE_FORMAT 4.#ifn
4350: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
4360: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23  LT_FILE_FORMAT.#
4370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4380: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
4390: 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  AT 4.#endif../*.
43a0: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  ** Determine whe
43b0: 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72  ther triggers ar
43c0: 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64  e recursive by d
43d0: 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61  efault.  This ca
43e0: 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20  n be.** changed 
43f0: 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e  at run-time usin
4400: 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23  g a pragma..*/.#
4410: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4420: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
4430: 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e  TRIGGERS.# defin
4440: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4450: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
4460: 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ERS 0.#endif../*
4470: 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65  .** Provide a de
4480: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
4490: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
44a0: 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20  E in case it is 
44b0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  not specified.**
44c0: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   on the command-
44d0: 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  line.*/.#ifndef 
44e0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
44f0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
4500: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23  E_TEMP_STORE 1.#
4510: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
4520: 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20  EMP_STORE_xc 1  
4530: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
4540: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
4550: 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76  f../*.** If no v
4560: 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 70 72  alue has been pr
4570: 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54  ovided for SQLIT
4580: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4590: 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53  EADS, or if.** S
45a0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
45b0: 20 69 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65   is set to 3 (ne
45c0: 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72  ver use temporar
45d0: 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74  y files), set it
45e0: 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a  .** to zero..*/.
45f0: 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  #if SQLITE_TEMP_
4600: 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49  STORE==3 || SQLI
4610: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30  TE_THREADSAFE==0
4620: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4630: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4640: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4650: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4660: 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23  READS 0.#endif.#
4670: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
4680: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4690: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
46a0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
46b0: 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 8.#endif.#if
46c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
46d0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
46e0: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
46f0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
4700: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
4710: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
4720: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4730: 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  EADS>SQLITE_MAX_
4740: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
4750: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
4760: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4770: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4780: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4790: 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ADS SQLITE_DEFAU
47a0: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
47b0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
47c0: 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74  The default init
47d0: 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66  ial allocation f
47e0: 6f 72 20 74 68 65 20 70 61 67 65 63 61 63 68 65  or the pagecache
47f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61   when using sepa
4800: 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68  rate.** pagecach
4810: 65 73 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  es for each data
4820: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
4830: 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d    A positive num
4840: 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75  ber is the.** nu
4850: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20  mber of pages.  
4860: 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  A negative numbe
4870: 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73  r N translations
4880: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 62 75   means that a bu
4890: 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34  ffer.** of -1024
48a0: 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f  *N bytes is allo
48b0: 63 61 74 65 64 20 61 6e 64 20 75 73 65 64 20 66  cated and used f
48c0: 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73  or as many pages
48d0: 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64   as it will hold
48e0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
48f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
4900: 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69  HE_INITSZ.# defi
4910: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4920: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20  T_PCACHE_INITSZ 
4930: 31 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  100.#endif../*.*
4940: 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64  * GCC does not d
4950: 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74  efine the offset
4960: 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65  of() macro so we
4970: 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69  'll have to do i
4980: 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a  t.** ourselves..
4990: 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65  */.#ifndef offse
49a0: 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73  tof.#define offs
49b0: 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46  etof(STRUCTURE,F
49c0: 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68  IELD) ((int)((ch
49d0: 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45  ar*)&((STRUCTURE
49e0: 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65  *)0)->FIELD)).#e
49f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
4a00: 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69  os to compute mi
4a10: 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75  nimum and maximu
4a20: 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73  m of two numbers
4a30: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e  ..*/.#ifndef MIN
4a40: 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  .# define MIN(A,
4a50: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
4a60: 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  (B)).#endif.#ifn
4a70: 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65  def MAX.# define
4a80: 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28   MAX(A,B) ((A)>(
4a90: 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64  B)?(A):(B)).#end
4aa0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74  if../*.** Swap t
4ab0: 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79  wo objects of ty
4ac0: 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66  pe TYPE..*/.#def
4ad0: 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c  ine SWAP(TYPE,A,
4ae0: 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d  B) {TYPE t=A; A=
4af0: 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  B; B=t;}../*.** 
4b00: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4b10: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65  this machine use
4b20: 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c  s EBCDIC.  (Yes,
4b30: 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a   believe it or.*
4b40: 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65  * not, there are
4b50: 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20   still machines 
4b60: 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75  out there that u
4b70: 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23  se EBCDIC.).*/.#
4b80: 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27  if 'A' == '\301'
4b90: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4ba0: 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a  _EBCDIC 1.#else.
4bb0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4bc0: 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a  ASCII 1.#endif..
4bd0: 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f  /*.** Integers o
4be0: 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20  f known sizes.  
4bf0: 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d  These typedefs m
4c00: 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20  ight change for 
4c10: 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a  architectures.**
4c20: 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73   where the sizes
4c30: 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65   very.  Preproce
4c40: 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20  ssor macros are 
4c50: 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61  available so tha
4c60: 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63  t the.** types c
4c70: 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74  an be convenient
4c80: 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20  ly redefined at 
4c90: 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c  compile-type.  L
4ca0: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
4cb0: 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49          cc '-DUI
4cc0: 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20  NTPTR_TYPE=long 
4cd0: 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f  long int' ....*/
4ce0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f  .#ifndef UINT32_
4cf0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4d00: 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65  E_UINT32_T.#  de
4d10: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
4d20: 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65   uint32_t.# else
4d30: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
4d40: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
4d50: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4d60: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31  if.#ifndef UINT1
4d70: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
4d80: 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20  AVE_UINT16_T.#  
4d90: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
4da0: 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c  PE uint16_t.# el
4db0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4dc0: 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T16_TYPE unsigne
4dd0: 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  d short int.# en
4de0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4df0: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  ef INT16_TYPE.# 
4e00: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36  ifdef HAVE_INT16
4e10: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
4e20: 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a  16_TYPE int16_t.
4e30: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4e40: 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72   INT16_TYPE shor
4e50: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
4e60: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4e70: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
4e80: 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20  HAVE_UINT8_T.#  
4e90: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
4ea0: 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  E uint8_t.# else
4eb0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4ec0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63  _TYPE unsigned c
4ed0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
4ee0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f  if.#ifndef INT8_
4ef0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4f00: 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  E_INT8_T.#  defi
4f10: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74  ne INT8_TYPE int
4f20: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
4f30: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
4f40: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4f50: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4f60: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
4f70: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
4f80: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
4f90: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
4fa0: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
4fb0: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
4fc0: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
4fd0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4fe0: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
4ff0: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
5000: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
5010: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5020: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
5030: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
5040: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
5050: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5060: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
5070: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
5080: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
5090: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
50a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
50b0: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
50c0: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
50d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
50e0: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
50f0: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
5100: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
5110: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5120: 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50  typedef INT8_TYP
5130: 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20  E i8;           
5140: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
5150: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
5160: 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58  /*.** SQLITE_MAX
5170: 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f  _U32 is a u64 co
5180: 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74  nstant that is t
5190: 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76  he maximum u64 v
51a0: 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e  alue.** that can
51b0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
51c0: 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  u32 without loss
51d0: 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76   of data.  The v
51e0: 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30  alue.** is 0x000
51f0: 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20  00000ffffffff.  
5200: 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71  But because of q
5210: 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f  uirks of some co
5220: 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68  mpilers, we.** h
5230: 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74  ave to specify t
5240: 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  he value in the 
5250: 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d  less intuitive m
5260: 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a  anner shown:.*/.
5270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
5280: 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29  AX_U32  ((((u64)
5290: 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a  1)<<32)-1)../*.*
52a0: 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75  * The datatype u
52b0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74  sed to store est
52c0: 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75  imates of the nu
52d0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
52e0: 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  a.** table or in
52f0: 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e  dex.  This is an
5300: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
5310: 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e  r type.  For 99.
5320: 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72  9% of.** the wor
5330: 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74  ld, a 32-bit int
5340: 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65  eger is sufficie
5350: 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69  nt.  But a 64-bi
5360: 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e  t integer.** can
5370: 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70   be used at comp
5380: 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69  ile-time if desi
5390: 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  red..*/.#ifdef S
53a0: 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54  QLITE_64BIT_STAT
53b0: 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74  S. typedef u64 t
53c0: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34  Rowcnt;    /* 64
53d0: 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71  -bit only if req
53e0: 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c  uested at compil
53f0: 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a  e-time */.#else.
5400: 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f   typedef u32 tRo
5410: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62  wcnt;    /* 32-b
5420: 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  it is the defaul
5430: 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  t */.#endif../*.
5440: 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61  ** Estimated qua
5450: 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72  ntities used for
5460: 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20   query planning 
5470: 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36  are stored as 16
5480: 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68  -bit.** logarith
5490: 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74  ms.  For quantit
54a0: 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73  y X, the value s
54b0: 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32  tored is 10*log2
54c0: 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69  (X).  This.** gi
54d0: 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72  ves a possible r
54e0: 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f  ange of values o
54f0: 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  f approximately 
5500: 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38  1.0e986 to 1e-98
5510: 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c  6..** But the al
5520: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65  lowed values are
5530: 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20   "grainy".  Not 
5540: 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72  every value is r
5550: 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a  epresentable..**
5560: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75   For example, qu
5570: 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20  antities 16 and 
5580: 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72  17 are both repr
5590: 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67  esented by a Log
55a0: 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48  Est.** of 40.  H
55b0: 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f  owever, since Lo
55c0: 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73 20  gEst quantities 
55d0: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
55e0: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
55f0: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
5600: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
5610: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
5620: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
5630: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
5640: 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73   "Logarithmic Es
5650: 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45  timate"..**.** E
5660: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20  xamples:.**     
5670: 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20   1 -> 0         
5680: 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20       20 -> 43   
5690: 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20         10000 -> 
56a0: 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e  132.**      2 ->
56b0: 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20   10             
56c0: 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20  25 -> 46        
56d0: 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a    25000 -> 146.*
56e0: 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20  *      3 -> 16  
56f0: 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e            100 ->
5700: 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30   66        10000
5710: 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20  00 -> 199.**    
5720: 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20    4 -> 20       
5730: 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20      1000 -> 99  
5740: 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e        1048576 ->
5750: 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d   200.**     10 -
5760: 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31  > 33           1
5770: 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32  024 -> 100    42
5780: 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a  94967296 -> 320.
5790: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74  **.** The LogEst
57a0: 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65   can be negative
57b0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61   to indicate fra
57c0: 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a  ctional values..
57d0: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
57e0: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
57f0: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
5800: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
5810: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
5820: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5830: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
5840: 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50  Set the SQLITE_P
5850: 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20  TRSIZE macro to 
5860: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
5870: 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72  tes in a pointer
5880: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5890: 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20  TE_PTRSIZE.# if 
58a0: 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46  defined(__SIZEOF
58b0: 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20  _POINTER__).#   
58c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
58d0: 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50  RSIZE __SIZEOF_P
58e0: 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20  OINTER__.# elif 
58f0: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
5900: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
5910: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
5920: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
5930: 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69     \.       defi
5940: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c  ned(_M_ARM)   ||
5950: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
5960: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
5970: 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e  __x86).#   defin
5980: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5990: 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65   4.# else.#   de
59a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
59b0: 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 8.# endif.#e
59c0: 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74  ndif../* The upt
59d0: 72 20 74 79 70 65 20 69 73 20 61 6e 20 75 6e 73  r type is an uns
59e0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6c 61  igned integer la
59f0: 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f  rge enough to ho
5a00: 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a  ld a pointer.*/.
5a10: 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  #if defined(HAVE
5a20: 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74 79 70  _STDINT_H).  typ
5a30: 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74 20 75  edef uintptr_t u
5a40: 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54  ptr;.#elif SQLIT
5a50: 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74  E_PTRSIZE==4.  t
5a60: 79 70 65 64 65 66 20 75 33 32 20 75 70 74 72 3b  ypedef u32 uptr;
5a70: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
5a80: 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e 64 69   u64 uptr;.#endi
5a90: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
5aa0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
5ab0: 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73 20 74  ) macro checks t
5ac0: 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74 65 72  o see if pointer
5ad0: 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20   P points to.** 
5ae0: 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77 65 65  something betwee
5af0: 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65 29 20  n S (inclusive) 
5b00: 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69 76 65  and E (exclusive
5b10: 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  )..**.** In othe
5b20: 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20 61 20  r words, S is a 
5b30: 62 75 66 66 65 72 20 61 6e 64 20 45 20 69 73 20  buffer and E is 
5b40: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
5b50: 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
5b60: 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  r.** the end of 
5b70: 62 75 66 66 65 72 20 53 2e 20 20 54 68 69 73 20  buffer S.  This 
5b80: 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20 74 72  macro returns tr
5b90: 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73 20 74  ue if P points t
5ba0: 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63  o something.** c
5bb0: 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
5bc0: 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f  the buffer S..*/
5bd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5be0: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
5bf0: 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70 74 72  (uptr)(P)>=(uptr
5c00: 29 28 53 29 29 26 26 28 28 75 70 74 72 29 28 50  )(S))&&((uptr)(P
5c10: 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a 0a 0a  )<(uptr)(E)))...
5c20: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
5c30: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
5c40: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
5c50: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
5c60: 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68  ndian,.** and wh
5c70: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
5c80: 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20  t determination 
5c90: 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63  is run-time or c
5ca0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a  ompile-time..**.
5cb0: 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66  ** For best perf
5cc0: 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65  ormance, an atte
5cd0: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67  mpt is made to g
5ce0: 75 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65  uess at the byte
5cf0: 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20  -order.** using 
5d00: 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d  C-preprocessor m
5d10: 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20  acros.  If that 
5d20: 69 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c  is unsuccessful,
5d30: 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49   or if.** -DSQLI
5d40: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
5d50: 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74  RDER=1 is set, t
5d60: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
5d70: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
5d80: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
5d90: 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33 38  #if (defined(i38
5da0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
5db0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
5dc0: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
5dd0: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64  ) ||    \.     d
5de0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29  efined(__x86_64)
5df0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
5e00: 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  6_64__) || defin
5e10: 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20  ed(_M_X64)  ||  
5e20: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
5e30: 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65  (_M_AMD64) || de
5e40: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
5e50: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
5e60: 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20  86)   ||    \.  
5e70: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d     defined(__arm
5e80: 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65 64  __)) && !defined
5e90: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
5ea0: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5eb0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5ec0: 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 64  RDER    1234.# d
5ed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
5ee0: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
5ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5f00: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
5f10: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5f20: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
5f30: 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69  TF16LE.#endif.#i
5f40: 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72 63  f (defined(sparc
5f50: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
5f60: 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20  __ppc__))  \.   
5f70: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
5f80: 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45  ITE_RUNTIME_BYTE
5f90: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
5fa0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5fb0: 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e      4321.# defin
5fc0: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
5fd0: 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65  AN    1.# define
5fe0: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
5ff0: 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20  DIAN 0.# define 
6000: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6010: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6020: 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  BE.#endif.#if !d
6030: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59  efined(SQLITE_BY
6040: 54 45 4f 52 44 45 52 29 0a 23 20 69 66 64 65 66  TEORDER).# ifdef
6050: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6060: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6070: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6080: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6090: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
60a0: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
60b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
60c0: 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20  YTEORDER    0   
60d0: 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e    /* 0 means "un
60e0: 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65  known at compile
60f0: 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69  -time" */.# defi
6100: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
6110: 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a  IAN    (*(char *
6120: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
6130: 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  0).# define SQLI
6140: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
6150: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6160: 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65  te3one)==1).# de
6170: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6180: 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45  6NATIVE  (SQLITE
6190: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
61a0: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
61b0: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
61c0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74  ../*.** Constant
61d0: 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73  s for the larges
61e0: 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70  t and smallest p
61f0: 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73  ossible 64-bit s
6200: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a  igned integers..
6210: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
6220: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
6230: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
6240: 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  n both 32-bit an
6250: 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70  d 64-bit.** comp
6260: 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ilers..*/.#defin
6270: 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  e LARGEST_INT64 
6280: 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28   (0xffffffff|(((
6290: 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  i64)0x7fffffff)<
62a0: 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d  <32)).#define SM
62b0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28  ALLEST_INT64 (((
62c0: 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53  i64)-1) - LARGES
62d0: 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20  T_INT64)../*.** 
62e0: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
62f0: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
6300: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
6310: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
6320: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
6330: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
6340: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
6350: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
6360: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
6370: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
6380: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
6390: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
63a0: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
63b0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
63c0: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
63d0: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
63e0: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
63f0: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
6400: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
6410: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
6420: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
6430: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
6440: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
6450: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
6460: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
6470: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
6480: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
6490: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
64a0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
64b0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
64c0: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
64d0: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
64e0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
64f0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
6500: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
6510: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
6520: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
6530: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
6540: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
6550: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
6560: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
6570: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
6580: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
6590: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
65a0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
65b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
65c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
65d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
65e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
65f0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
6600: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
6610: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
6620: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
6630: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
6640: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
6650: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
6660: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
6670: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
6680: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6690: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
66a0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
66b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
66c0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
66d0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
66e0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
66f0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
6700: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
6710: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
6720: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
6730: 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  ls.h>.#endif.#if
6740: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
6750: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
6760: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
6770: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6780: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
6790: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
67a0: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
67b0: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
67c0: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20   defined(__sun) 
67d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
67e0: 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20  _FreeBSD__) \.  
67f0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61  || defined(__Dra
6800: 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65  gonFly__).#   de
6810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6820: 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66  MMAP_SIZE 0x7fff
6830: 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38  0000  /* 2147418
6840: 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20  112 */.# else.# 
6850: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6860: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
6870: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6880: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6890: 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78  _SIZE_xc 1 /* ex
68a0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
68b0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
68c0: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
68d0: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
68e0: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
68f0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
6900: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
6910: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
6920: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
6930: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
6940: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
6950: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
6960: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
6970: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
6980: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
6990: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
69a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
69b0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
69c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
69d0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
69e0: 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  ZE_xc 1  /* Excl
69f0: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
6a00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53   */.#endif.#if S
6a10: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6a20: 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d  AP_SIZE>SQLITE_M
6a30: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75  AX_MMAP_SIZE.# u
6a40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
6a50: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
6a60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
6a70: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
6a80: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6a90: 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  SIZE.#endif../*.
6aa0: 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53  ** Only one of S
6ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6ac0: 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  T3 or SQLITE_ENA
6ad0: 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65  BLE_STAT4 can be
6ae0: 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69   defined..** Pri
6af0: 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20 74  ority is given t
6b00: 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  o SQLITE_ENABLE_
6b10: 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68 65  STAT4.  If eithe
6b20: 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61  r are defined, a
6b30: 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51  lso.** define SQ
6b40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6b50: 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69  3_OR_STAT4.*/.#i
6b60: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
6b70: 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  LE_STAT4.# undef
6b80: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6b90: 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51  TAT3.# define SQ
6ba0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6bb0: 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c  3_OR_STAT4 1.#el
6bc0: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
6bd0: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
6be0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6bf0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
6c00: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
6c10: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6c20: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
6c30: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
6c40: 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f  _STAT4.#endif../
6c50: 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45  *.** SELECTTRACE
6c60: 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65  _ENABLED will be
6c70: 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20 64   either 1 or 0 d
6c80: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
6c90: 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68  her or not.** th
6ca0: 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20 67  e Select query g
6cb0: 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67  enerator tracing
6cc0: 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64   logic is turned
6cd0: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69   on..*/.#if defi
6ce0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
6cf0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
6d00: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
6d10: 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65  TTRACE).# define
6d20: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
6d30: 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64  BLED 1.#else.# d
6d40: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
6d50: 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64  E_ENABLED 0.#end
6d60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
6d70: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
6d80: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
6d90: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
6da0: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
6db0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
6dc0: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
6dd0: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20  e handle..**.** 
6de0: 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48  The sqlite.busyH
6df0: 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66  andler member of
6e00: 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75   the sqlite stru
6e10: 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ct contains the 
6e20: 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  busy.** callback
6e30: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
6e40: 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70  e handle. Each p
6e50: 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20  ager opened via 
6e60: 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61  the sqlite.** ha
6e70: 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61  ndle is passed a
6e80: 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69   pointer to sqli
6e90: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20  te.busyHandler. 
6ea0: 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  The busy-handler
6eb0: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  .** callback is 
6ec0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65  currently invoke
6ed0: 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68  d only from with
6ee0: 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74  in pager.c..*/.t
6ef0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75  ypedef struct Bu
6f00: 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61  syHandler BusyHa
6f10: 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75  ndler;.struct Bu
6f20: 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e  syHandler {.  in
6f30: 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20  t (*xFunc)(void 
6f40: 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20  *,int);  /* The 
6f50: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
6f60: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20  .  void *pArg;  
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6f80: 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75   First arg to bu
6f90: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
6fa0: 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20   int nBusy;     
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
6fc0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
6fd0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
6fe0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
6ff0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7000: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7010: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7020: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7030: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7040: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
7050: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
7060: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
7070: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
7080: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
7090: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
70a0: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
70b0: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
70c0: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
70d0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
70e0: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
70f0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
7100: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
7110: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
7120: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
7130: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
7140: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
7150: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
7160: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
7170: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
7180: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
7190: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
71a0: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
71b0: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
71c0: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
71d0: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
71e0: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
71f0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
7200: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
7210: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
7220: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
7230: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
7240: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
7250: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
7260: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
7270: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
7280: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
7290: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
72a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
72b0: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
72c0: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
72d0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
72e0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
72f0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
7300: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
7310: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
7320: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
7330: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
7340: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
7350: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
7360: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
7370: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
7380: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
7390: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
73a0: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
73b0: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
73c0: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
73d0: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
73e0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
73f0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
7400: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
7410: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
7420: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
7430: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
7440: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
7450: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
7460: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
7470: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
7480: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
7490: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
74a0: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
74b0: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
74c0: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
74d0: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
74e0: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
74f0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
7500: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
7510: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
7520: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
7530: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
7540: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
7550: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
7560: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
7570: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
7580: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
7590: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
75a0: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
75b0: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
75c0: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
75d0: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
75e0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
75f0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
7600: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
7610: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
7620: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
7630: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
7640: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
7650: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
7660: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
7670: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
7680: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
7690: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
76a0: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
76b0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
76c0: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
76d0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
76e0: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
76f0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
7700: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
7710: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
7720: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
7730: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
7740: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
7750: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
7760: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
7770: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
7780: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
7790: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
77a0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
77b0: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
77c0: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
77d0: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
77e0: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
77f0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
7800: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
7810: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
7820: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
7830: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
7840: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
7850: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
7860: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
7870: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
7880: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
7890: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
78a0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
78b0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
78c0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
78d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
78e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
78f0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
7900: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
7910: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
7920: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
7930: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
7940: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
7950: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
7960: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
7970: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
7980: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
7990: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
79a0: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
79b0: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
79c0: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
79d0: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
79e0: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
79f0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
7a00: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
7a10: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
7a20: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
7a30: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
7a40: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
7a50: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
7a60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
7a70: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
7a80: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
7a90: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
7aa0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
7ab0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
7ac0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
7ad0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
7ae0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
7af0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
7b00: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
7b10: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
7b20: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
7b30: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
7b40: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
7b50: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
7b60: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
7b70: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
7b80: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
7b90: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
7ba0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
7bb0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
7bc0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
7bd0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
7be0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
7bf0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
7c00: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
7c10: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
7c20: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
7c30: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
7c40: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
7c50: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
7c60: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
7c70: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
7c80: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
7c90: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
7ca0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
7cb0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7cc0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
7cd0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
7ce0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
7cf0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
7d00: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
7d10: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
7d20: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
7d30: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
7d40: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
7d50: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
7d60: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7d70: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
7d80: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
7d90: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
7da0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
7db0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
7dc0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
7dd0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
7de0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
7df0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
7e00: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
7e10: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
7e20: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
7e30: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
7e40: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
7e50: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
7e60: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
7e70: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
7e80: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
7e90: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
7ea0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
7eb0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
7ec0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ed0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
7ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ef0: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
7f00: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
7f10: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
7f20: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
7f30: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
7f40: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
7f50: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
7f60: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
7f70: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
7f80: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
7f90: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
7fa0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
7fb0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
7fc0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
7fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7fe0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
7ff0: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
8000: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
8010: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
8020: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
8030: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
8040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8050: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
8060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
8070: 65 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74  eUpdate PreUpdat
8080: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8090: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
80a0: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
80b0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
80c0: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
80d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80e0: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
80f0: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
8100: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
8110: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8120: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
8130: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8140: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8150: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8160: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8170: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8180: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8190: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
81a0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
81b0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
81c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
81d0: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
81e0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
81f0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
8200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8210: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
8220: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
8230: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8240: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8250: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8260: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8270: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8280: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
82a0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
82b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
82c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
82d0: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
82e0: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
82f0: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
8300: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
8310: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
8320: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
8330: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8340: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8350: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
8360: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
8370: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
8380: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
8390: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
83a0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
83b0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
83c0: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
83d0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
83e0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
83f0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
8400: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
8410: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
8420: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
8430: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
8440: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
8450: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
8460: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
8470: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
8480: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
8490: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
84a0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
84b0: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
84c0: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
84d0: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
84e0: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
84f0: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
8500: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
8510: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
8520: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
8530: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
8540: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
8550: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
8560: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
8580: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
8590: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
85a0: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
85b0: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
85c0: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
85d0: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
85e0: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
85f0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
8600: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
8610: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
8620: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8630: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
8640: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
8650: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
8660: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
8670: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
8680: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
8690: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
86a0: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
86b0: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86d0: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
86e0: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8700: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
8710: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8730: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
8740: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
8750: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
8760: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
8770: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
8780: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
8790: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
87a0: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
87b0: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
87c0: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
87d0: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
87e0: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
87f0: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
8800: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
8810: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
8820: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
8830: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
8840: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 28 50  T_SYNCHRONOUS (P
8850: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
8860: 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e 64 69 66 0a  _FULL-1).#endif.
8870: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
8880: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
8890: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
88a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
88b0: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
88c0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
88d0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
88e0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
88f0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
8900: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
8910: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
8920: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
8930: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8940: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
8950: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
8960: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
8970: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
8980: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
8990: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
89a0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
89b0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
89c0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
89d0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
89e0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
89f0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
8a00: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
8a10: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
8a20: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
8a30: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
8a40: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
8a50: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
8a60: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
8a70: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
8a80: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
8a90: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
8aa0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
8ab0: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
8ac0: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
8ad0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
8ae0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75  a to disk */.  u
8af0: 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20  8 bSyncSet;     
8b00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
8b10: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
8b20: 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72  us=N" has been r
8b30: 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  un */.  Schema *
8b40: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
8b50: 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62  Pointer to datab
8b60: 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73  ase schema (poss
8b70: 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a  ibly shared) */.
8b80: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
8b90: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
8ba0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
8bb0: 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61   stores a databa
8bc0: 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
8bd0: 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a   Most Schema obj
8be0: 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61  ects are associa
8bf0: 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65  ted with a Btree
8c00: 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  .  The exception
8c10: 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d   is.** the Schem
8c20: 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64  a for the TEMP d
8c30: 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33  atabaes (sqlite3
8c40: 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69  .aDb[1]) which i
8c50: 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e  s free-standing.
8c60: 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61  .** In shared ca
8c70: 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67  che mode, a sing
8c80: 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  le Schema object
8c90: 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62   can be shared b
8ca0: 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74  y multiple.** Bt
8cb0: 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20  rees that refer 
8cc0: 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65  to the same unde
8cd0: 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20  rlying BtShared 
8ce0: 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63  object..**.** Sc
8cf0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
8d00: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
8d10: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
8d20: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
8d30: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
8d40: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
8d50: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
8d60: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
8d70: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
8d80: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
8d90: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
8da0: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
8db0: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
8dc0: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
8dd0: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
8de0: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
8df0: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
8e00: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
8e10: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
8e20: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
8e30: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
8e40: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
8e50: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
8e60: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
8e70: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
8e80: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
8e90: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
8ea0: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
8eb0: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
8ec0: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
8ed0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
8ee0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
8ef0: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
8f00: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
8f10: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
8f20: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
8f30: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
8f40: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
8f50: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
8f60: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
8f70: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
8f80: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8f90: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
8fa0: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
8fb0: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
8fc0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
8fd0: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
8fe0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
8ff0: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
9000: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
9010: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
9020: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
9030: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
9040: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
9050: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
9060: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
9070: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
9080: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
9090: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
90a0: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
90b0: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
90c0: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
90d0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
90e0: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
90f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
9100: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
9110: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
9120: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
9130: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
9140: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9150: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
9160: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
9170: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9180: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
9190: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
91a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
91b0: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
91c0: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
91d0: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
91e0: 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  the.** Db.pSchem
91f0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
9200: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
9210: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9220: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
9230: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
9240: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
9250: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
9260: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
9270: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
9280: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9290: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
92a0: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
92b0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
92c0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
92d0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
92e0: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
92f0: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
9300: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
9310: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
9320: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
9330: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
9340: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
9350: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
9360: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
9370: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
9380: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
9390: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
93a0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
93b0: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
93c0: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
93d0: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
93e0: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
93f0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
9400: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
9410: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
9420: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
9430: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
9440: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
9450: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
9460: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
9470: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
9480: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
9490: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
94a0: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
94b0: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
94c0: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
94d0: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
94e0: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
94f0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
9500: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
9510: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
9520: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
9530: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
9540: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
9550: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
9560: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
9570: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
9580: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
9590: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
95a0: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
95b0: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
95c0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
95d0: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
95e0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
95f0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
9600: 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
9610: 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a  R_THREADS+1)../*
9620: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
9630: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
9640: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
9650: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
9660: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
9670: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
9680: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
9690: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
96a0: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
96b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
96c0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
96d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
96e0: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
96f0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
9700: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
9710: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
9720: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
9730: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
9740: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
9750: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
9760: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
9770: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
9780: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
9790: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
97a0: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
97b0: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
97c0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
97d0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
97e0: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
97f0: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
9800: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
9810: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
9820: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
9830: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
9840: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
9850: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
9860: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
9870: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
9880: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
9890: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
98a0: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
98b0: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
98c0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
98d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
98e0: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
98f0: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
9900: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
9910: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
9920: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
9930: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
9940: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
9950: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
9960: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
9970: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
9980: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
9990: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
99a0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
99b0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
99c0: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
99d0: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
99e0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
99f0: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
9a00: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
9a10: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
9a20: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
9a30: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32  ookaside {.  u32
9a40: 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20   bDisable;      
9a50: 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65       /* Only ope
9a60: 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69  rate the lookasi
9a70: 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a  de when zero */.
9a80: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
9a90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
9aa0: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
9ab0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
9ac0: 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20  8 bMalloced;    
9ad0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
9ae0: 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65  f pStart obtaine
9af0: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
9b00: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74  alloc() */.  int
9b10: 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20   nOut;          
9b20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9b30: 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e  f buffers curren
9b40: 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
9b50: 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20  */.  int mxOut; 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9b70: 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66  Highwater mark f
9b80: 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74  or nOut */.  int
9b90: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
9ba0: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
9bb0: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
9bc0: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
9bd0: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
9be0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
9bf0: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
9c00: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
9c10: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
9c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9c30: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
9c40: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
9c50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
9c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9c70: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
9c80: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
9c90: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
9ca0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
9cb0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
9cc0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
9cd0: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
9ce0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
9cf0: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
9d00: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
9d10: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
9d20: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
9d30: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
9d40: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
9d50: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
9d60: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
9d70: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
9d80: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
9d90: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
9da0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
9db0: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
9dc0: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
9dd0: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
9de0: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
9df0: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
9e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
9e10: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
9e20: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
9e30: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
9e40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
9e50: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
9e60: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
9e70: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
9e80: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
9e90: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9ea0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
9eb0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
9ec0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
9ed0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
9ee0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
9ef0: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
9f00: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
9f10: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9f20: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9f30: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
9f40: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
9f50: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
9f60: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9f80: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
9f90: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
9fa0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
9fd0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
9fe0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
9ff0: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
a000: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
a010: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
a020: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
a030: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
a040: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
a050: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
a060: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
a070: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
a080: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
a090: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
a0a0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
a0b0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
a0c0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
a0d0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
a0e0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
a0f0: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
a100: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
a110: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
a120: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
a130: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
a140: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
a150: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
a160: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
a170: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
a180: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
a190: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
a1a0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
a1b0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
a1c0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
a1d0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
a1e0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
a1f0: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
a200: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
a210: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
a220: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
a230: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
a240: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
a250: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
a260: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
a270: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
a280: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
a290: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
a2a0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
a2b0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a2c0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a2d0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
a2e0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
a2f0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
a300: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
a310: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
a320: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a330: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
a340: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
a350: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
a360: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a370: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
a380: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3a0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
a3b0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
a3c0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
a3d0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
a3e0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
a3f0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
a400: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a410: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
a440: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  endif.../*.** Ea
a450: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
a460: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
a470: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a480: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
a490: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
a4a0: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
a4b0: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
a4c0: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
a4d0: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
a4e0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
a4f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
a500: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
a510: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
a520: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
a530: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
a540: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
a550: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a560: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
a570: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
a580: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
a590: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
a5a0: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5c0: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
a5d0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
a5e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a5f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a600: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
a610: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
a620: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
a650: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
a660: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
a670: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
a680: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
a690: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
a6a0: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
a6b0: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
a6c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a6d0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
a6e0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
a6f0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
a700: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
a710: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
a720: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
a730: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
a740: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a760: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
a770: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
a780: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
a790: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
a7a0: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
a7b0: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
a7c0: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
a7d0: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
a7e0: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
a7f0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
a800: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
a810: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
a820: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a840: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
a850: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
a860: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
a870: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
a880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
a890: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
a8a0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a8c0: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
a8d0: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
a8e0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
a8f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
a900: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
a910: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
a920: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a940: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
a950: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
a960: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
a970: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
a980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
a990: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
a9a0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
a9b0: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a9d0: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
a9e0: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
a9f0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
aa00: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
aa10: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
aa20: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
aa30: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
aa40: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
aa50: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
aa60: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
aa70: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
aa80: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
aa90: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
aab0: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
aac0: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
aad0: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
aae0: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
aaf0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
ab00: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
ab10: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
ab20: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20  s a TS */.  int 
ab30: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
ab40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
ab50: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
ab60: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
ab70: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
ab90: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
aba0: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
abb0: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
abc0: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
abd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
abe0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
abf0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
ac00: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
ac10: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
ac20: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
ac30: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
ac40: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
ac50: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
ac60: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
ac70: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
ac80: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
ac90: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
aca0: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
acb0: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
acc0: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
acd0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
ace0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
acf0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
ad00: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
ad10: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
ad20: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
ad40: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
ad50: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
ad60: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
ad70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad80: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
ad90: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
ada0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
adb0: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
add0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
ade0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
adf0: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
ae00: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
ae10: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
ae20: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
ae30: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
ae40: 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65  /.    u8 imposte
ae50: 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  rTable;         
ae60: 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e    /* Building an
ae70: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
ae80: 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69  */.  } init;.  i
ae90: 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20  nt nVdbeActive; 
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20  Number of VDBEs 
aec0: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
aed0: 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  g */.  int nVdbe
aee0: 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20  Read;           
aef0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
af00: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
af10: 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  hat read or writ
af20: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
af30: 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  Write;          
af40: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
af50: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
af60: 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69  hat read and wri
af70: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
af80: 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  eExec;          
af90: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
afa0: 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
afb0: 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f  to VdbeExec() */
afc0: 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79  .  int nVDestroy
afd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
afe0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
aff0: 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  tive OP_VDestroy
b000: 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20   operations */. 
b010: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b030: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
b040: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
b050: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
b060: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
b070: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
b080: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
b090: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
b0a0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
b0b0: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
b0c0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
b0d0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
b0e0: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
b110: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
b120: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
b130: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
b140: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
b150: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
b160: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
b170: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
b180: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b1a0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
b1b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
b1c0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
b1f0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
b200: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
b210: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
b220: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
b230: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
b240: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
b250: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
b260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b270: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
b280: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
b290: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
b2a0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
b2b0: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
b2c0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
b2d0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
b2e0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
b2f0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
b300: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
b310: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b320: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
b330: 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  64);.#ifdef SQLI
b340: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
b350: 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20  ATE_HOOK.  void 
b360: 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20  *pPreUpdateArg; 
b370: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b380: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50  t argument to xP
b390: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
b3a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
b3b0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  eUpdateCallback)
b3c0: 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65  (   /* Registere
b3d0: 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
b3e0: 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29  preupdate_hook()
b3f0: 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71   */.    void*,sq
b400: 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20  lite3*,int,char 
b410: 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73  const*,char cons
b420: 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  t*,sqlite3_int64
b430: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20  ,sqlite3_int64. 
b440: 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20   );.  PreUpdate 
b450: 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20  *pPreUpdate;    
b460: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
b470: 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70  or active pre-up
b480: 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  date callback */
b490: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b4a0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
b4b0: 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64  TE_HOOK */.#ifnd
b4c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
b4d0: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
b4e0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
b4f0: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
b500: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
b510: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
b520: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
b530: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
b540: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
b550: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
b560: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
b570: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
b580: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
b590: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
b5a0: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
b5b0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
b5c0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
b5d0: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
b5e0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
b5f0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
b600: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
b610: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
b620: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
b630: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
b640: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
b650: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
b660: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
b670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
b680: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
b690: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
b6a0: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
b6b0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
b6c0: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
b6d0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
b6e0: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
b6f0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
b700: 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20  xauth xAuth;    
b710: 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20        /* Access 
b720: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75  authorization fu
b730: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
b740: 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20   *pAuthArg;     
b750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
b760: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
b770: 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e   access auth fun
b780: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
b790: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b7a0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
b7b0: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50  LBACK.  int (*xP
b7c0: 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29  rogress)(void *)
b7d0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f  ;     /* The pro
b7e0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
b7f0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72  /.  void *pProgr
b800: 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  essArg;         
b810: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b820: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
b830: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69  llback */.  unsi
b840: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70  gned nProgressOp
b850: 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  s;        /* Num
b860: 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66  ber of opcodes f
b870: 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  or progress call
b880: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  back */.#endif.#
b890: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b8a0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
b8b0: 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20    int nVTrans;  
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
b8e0: 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a  e of aVTrans */.
b8f0: 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20    Hash aModule; 
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b910: 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20  /* populated by 
b920: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
b930: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61  odule() */.  Vta
b940: 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20  bCtx *pVtabCtx; 
b950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
b960: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
b970: 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72   vtab connect/cr
b980: 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  eate */.  VTable
b990: 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20   **aVTrans;     
b9a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75          /* Virtu
b9b0: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  al tables with o
b9c0: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  pen transactions
b9d0: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44   */.  VTable *pD
b9e0: 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a  isconnect;    /*
b9f0: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
ba00: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
ba10: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
ba20: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
ba30: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
ba40: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
ba50: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
ba60: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
ba70: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba90: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
baa0: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
bab0: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
bac0: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
bad0: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
bae0: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
baf0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
bb00: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
bb10: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
bb20: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
bb30: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
bb40: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
bb50: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
bb60: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
bb70: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
bb80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
bb90: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
bba0: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
bbb0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
bbc0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
bbd0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bbe0: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
bbf0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
bc00: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc20: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
bc30: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
bc40: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
bc50: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
bc60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bc70: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
bc80: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
bc90: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
bca0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
bcb0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
bcc0: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
bcd0: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
bce0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
bcf0: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
bd00: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
bd10: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
bd20: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
bd30: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
bd40: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
bd50: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
bd60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
bd70: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
bd80: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
bd90: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
bda0: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
bdb0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
bdc0: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
bdd0: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
bde0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
bdf0: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
be00: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
be10: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
be20: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
be30: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
be40: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
be50: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
be60: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
be70: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
be80: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
be90: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
bea0: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
beb0: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
bec0: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
bed0: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
bee0: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
bef0: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
bf00: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
bf10: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
bf20: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
bf30: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
bf40: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
bf50: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
bf60: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
bf70: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
bf80: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
bf90: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
bfa0: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
bfd0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
bfe0: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
bff0: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
c000: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
c010: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
c020: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
c030: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
c040: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
c050: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
c060: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
c070: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
c080: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
c090: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
c0a0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
c0b0: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
c0c0: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
c0d0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
c0e0: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
c0f0: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
c100: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
c110: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
c120: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
c130: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
c140: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
c150: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
c160: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
c170: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
c180: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
c190: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
c1a0: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  te3.flags..**.**
c1b0: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
c1c0: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
c1d0: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
c1e0: 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46      SQLITE_FullF
c1f0: 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45  Sync     == PAGE
c200: 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  R_FULLFSYNC.**  
c210: 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46      SQLITE_CkptF
c220: 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45  ullFSync == PAGE
c230: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
c240: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
c250: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d  CacheSpill    ==
c260: 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49   PAGER_CACHE_SPI
c270: 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL.*/.#define SQ
c280: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20  LITE_VdbeTrace  
c290: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
c2a0: 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65  /* True to trace
c2b0: 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20   VDBE execution 
c2c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c2d0: 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20  E_InternChanges 
c2e0: 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20   0x00000002  /* 
c2f0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
c300: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
c310: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c320: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
c330: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53  0x00000004  /* S
c340: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
c350: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
c360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c370: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
c380: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
c390: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
c3a0: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
c3b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c3c0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
c3d0: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73  x00000010  /* Us
c3e0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
c3f0: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
c400: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
c410: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
c420: 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74  0000020  /* OK t
c430: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
c440: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
c450: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
c460: 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20  mes  0x00000040 
c470: 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63   /* Show short c
c480: 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a  olumns names */.
c490: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
c4a0: 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78  ountRows      0x
c4b0: 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75  00000080  /* Cou
c4c0: 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  nt rows changed 
c4d0: 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20  by INSERT, */.  
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c500: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c          /*   DEL
c510: 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61  ETE, or UPDATE a
c520: 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20  nd return */.   
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20         /*   the 
c560: 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61  count using a ca
c570: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69  llback. */.#defi
c580: 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61  ne SQLITE_NullCa
c590: 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30  llback   0x00000
c5a0: 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  100  /* Invoke t
c5b0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65  he callback once
c5c0: 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20   if the */.     
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74       /*   result
c600: 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f   set is empty */
c610: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c620: 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30  SqlTrace       0
c630: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65  x00000200  /* De
c640: 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73  bug print SQL as
c650: 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a   it executes */.
c660: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
c670: 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78  dbeListing    0x
c680: 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62  00000400  /* Deb
c690: 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56  ug listings of V
c6a0: 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a  DBE programs */.
c6b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
c6c0: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
c6d0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20  00000800  /* OK 
c6e0: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
c6f0: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
c700: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64  ne SQLITE_VdbeAd
c710: 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31  dopTrace 0x00001
c720: 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71  000  /* Trace sq
c730: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29  lite3VdbeAddOp()
c740: 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e   calls */.#defin
c750: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
c760: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30  hecks   0x000020
c770: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
c780: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
c790: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
c7a0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
c7b0: 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34  committed 0x0004
c7c0: 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72  000  /* For shar
c7d0: 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
c7e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c7f0: 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30  LegacyFileFmt  0
c800: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72  x00008000  /* Cr
c810: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
c820: 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a  es in format 1 *
c830: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c840: 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20  _RecoveryMode   
c850: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49  0x00010000  /* I
c860: 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72  gnore schema err
c870: 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ors */.#define S
c880: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
c890: 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20  er   0x00020000 
c8a0: 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72   /* Reverse unor
c8b0: 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f  dered SELECTs */
c8c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c8d0: 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30  RecTriggers    0
c8e0: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e  x00040000  /* En
c8f0: 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74  able recursive t
c900: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
c910: 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  ne SQLITE_Foreig
c920: 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30  nKeys    0x00080
c930: 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20  000  /* Enforce 
c940: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
c950: 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66  traints  */.#def
c960: 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49  ine SQLITE_AutoI
c970: 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30  ndex      0x0010
c980: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
c990: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
c9a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c9b0: 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69  ITE_PreferBuilti
c9c0: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
c9d0: 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20  * Preference to 
c9e0: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a  built-in funcs *
c9f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ca00: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20  _LoadExtension  
ca10: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45  0x00400000  /* E
ca20: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
ca30: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sion */.#define 
ca40: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69  SQLITE_EnableTri
ca50: 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30  gger  0x00800000
ca60: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
ca70: 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
ca80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
ca90: 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78  eferFKs       0x
caa0: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66  01000000  /* Def
cab0: 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72  er all FK constr
cac0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
cad0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
cae0: 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30  y      0x0200000
caf0: 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61  0  /* Disable da
cb00: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a  tabase changes *
cb10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cb20: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
cb30: 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44  0x04000000  /* D
cb40: 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45  ebug EXPLAIN QUE
cb50: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69  RY PLAN */.#defi
cb60: 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d  ne SQLITE_Vacuum
cb70: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30           0x08000
cb80: 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  000  /* Currentl
cb90: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
cba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cbb0: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
cbc0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68  x10000000  /* Ch
cbd0: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
cbe0: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
cbf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cc00: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
cc10: 32 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  20000000  /* Ena
cc20: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
cc30: 65 72 28 32 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  er(2) */.../*.**
cc40: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
cc50: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
cc60: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
cc70: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
cc80: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
cc90: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
cca0: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
ccb0: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
ccc0: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
ccd0: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
cce0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
ccf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
cd00: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
cd10: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
cd20: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
cd30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cd40: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
cd50: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
cd60: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
cd70: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
cd80: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
cd90: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
cda0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
cdb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cdc0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
cdd0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
cde0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
cdf0: 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20  /./*            
ce00: 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20      not used    
ce10: 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a  0x0010   // Was:
ce20: 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41   SQLITE_IdxRealA
ce30: 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sInt */.#define 
ce40: 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f  SQLITE_DistinctO
ce50: 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f  pt    0x0020   /
ce60: 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67  * DISTINCT using
ce70: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
ce80: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72  ine SQLITE_Cover
ce90: 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30  IdxScan   0x0040
cea0: 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69     /* Covering i
ceb0: 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64  ndex scans */.#d
cec0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64  efine SQLITE_Ord
ced0: 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30  erByIdxJoin 0x00
cee0: 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59  80   /* ORDER BY
cef0: 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e   of joins via in
cf00: 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
cf10: 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74  QLITE_SubqCorout
cf20: 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a  ine  0x0100   /*
cf30: 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65   Evaluate subque
cf40: 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e  ries as coroutin
cf50: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cf60: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
cf70: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
cf80: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
cf90: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
cfa0: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
cfb0: 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20  pJoin   0x0400  
cfc0: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
cfd0: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
cfe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cff0: 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20  E_Stat34        
d000: 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65   0x0800   /* Use
d010: 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20   STAT3 or STAT4 
d020: 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
d030: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
d040: 74 73 20 20 20 20 30 78 32 30 30 30 20 20 20 2f  ts    0x2000   /
d050: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
d060: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
d070: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
d080: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
d090: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
d0a0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
d0b0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
d0c0: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
d0d0: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
d0e0: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
d0f0: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
d100: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d110: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
d120: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
d130: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
d140: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
d150: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
d160: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
d170: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
d180: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
d190: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
d1a0: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
d1b0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
d1c0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
d1d0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
d1e0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
d1f0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
d200: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
d210: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
d220: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
d230: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
d240: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
d250: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
d260: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
d270: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
d280: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
d290: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
d2a0: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
d2b0: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
d2c0: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
d2d0: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
d2e0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
d2f0: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
d300: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
d310: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
d320: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
d330: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
d340: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
d350: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
d360: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
d370: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
d380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
d390: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
d3a0: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
d3b0: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
d3c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
d3d0: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
d3e0: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
d3f0: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
d400: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d410: 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
d420: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
d430: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
d440: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
d450: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
d460: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
d470: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
d480: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
d490: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d4a0: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
d4b0: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
d4c0: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
d4d0: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
d4e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d4f0: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
d500: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
d510: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
d520: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
d530: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
d540: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
d550: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
d560: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
d570: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
d580: 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61  ture.  For globa
d590: 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  l built-in funct
d5a0: 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72  ions (ex: substr
d5b0: 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74  (), max(), count
d5c0: 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ()).** a pointer
d5d0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
d5e0: 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68  re is held in th
d5f0: 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e  e sqlite3Builtin
d600: 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74  Functions object
d610: 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e  ..** For per-con
d620: 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74  nection applicat
d630: 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
d640: 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72  tions, a pointer
d650: 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   to this.** stru
d660: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
d670: 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68   the db->aHash h
d680: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ash table..**.**
d690: 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65   The u.pHash fie
d6a0: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68  ld is used by th
d6b0: 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  e global built-i
d6c0: 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74  ns.  The u.pDest
d6d0: 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20  ructor.** field 
d6e0: 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63  is used by per-c
d6f0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65  onnection app-de
d700: 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  f functions..*/.
d710: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
d720: 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20  .  i8 nArg;     
d730: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d740: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
d750: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
d760: 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e  ted */.  u16 fun
d770: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
d780: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
d790: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
d7a0: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
d7b0: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
d7c0: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
d7d0: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
d7e0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
d7f0: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
d800: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
d810: 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63  .  void (*xSFunc
d820: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
d830: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
d840: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63  alue**); /* func
d850: 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a   or agg-step */.
d860: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
d870: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
d880: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
d890: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66          /* Agg f
d8a0: 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f  inalizer */.  co
d8b0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
d8c0: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
d8d0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
d8e0: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
d8f0: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
d900: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
d910: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
d920: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
d930: 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e   hash */.    Fun
d940: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
d950: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
d960: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
d970: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
d980: 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  tion */.  } u;.}
d990: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
d9a0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
d9b0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
d9c0: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
d9d0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
d9e0: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
d9f0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
da00: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
da10: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
da20: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
da30: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
da40: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
da50: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
da60: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
da70: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
da80: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
da90: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
daa0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
dab0: 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68   is set to.** th
dac0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
dad0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
dae0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
daf0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
db00: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
db10: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
db20: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
db30: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
db40: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
db50: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
db60: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
db70: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
db80: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
db90: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
dba0: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
dbb0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
dbc0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
dbd0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
dbe0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
dbf0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
dc00: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
dc10: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
dc20: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
dc30: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
dc40: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
dc50: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
dc60: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
dc70: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
dc80: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
dc90: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
dca0: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
dcb0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
dcc0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
dcd0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
dce0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
dcf0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
dd00: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
dd10: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
dd20: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
dd30: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
dd40: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
dd50: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
dd60: 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a  PEOFARG.  And.**
dd70: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
dd80: 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68  STANT must be th
dd90: 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45  e same as SQLITE
dda0: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20  _DETERMINISTIC. 
ddb0: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
ddc0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
ddd0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
dde0: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a   verify this..**
ddf0: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
de00: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
de10: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
de20: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
de30: 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20  C_MINMAX    ==  
de40: 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  NC_MinMaxAgg    
de50: 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67    == SF_MinMaxAg
de60: 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  g.**     SQLITE_
de70: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d  FUNC_LENGTH    =
de80: 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  =  OPFLAG_LENGTH
de90: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
dea0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
deb0: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45   ==  OPFLAG_TYPE
dec0: 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  OFARG.**     SQL
ded0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
dee0: 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45  T  ==  SQLITE_DE
def0: 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d  TERMINISTIC from
df00: 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20   the API.**     
df10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
df20: 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e  ASK   depends on
df30: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63   SQLITE_UTF* mac
df40: 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a  ros in the API.*
df50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
df60: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
df70: 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  x0003 /* SQLITE_
df80: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
df90: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
dfa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dfb0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
dfc0: 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64  0x0004 /* Candid
dfd0: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
dfe0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
dff0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e000: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
e010: 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0008 /* Case-sen
e020: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
e030: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e040: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e050: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30  _EPHEM    0x0010
e060: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
e070: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
e080: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e090: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
e0a0: 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74   0x0020 /* sqlit
e0b0: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
e0c0: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
e0d0: 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ed*/.#define SQL
e0e0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
e0f0: 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c    0x0040 /* Buil
e100: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
e110: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
e120: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
e130: 50 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a  PEOF   0x0080 /*
e140: 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66   Built-in typeof
e150: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
e160: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
e170: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31  NC_COUNT    0x01
e180: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
e190: 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74  ount(*) aggregat
e1a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
e1b0: 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43  ITE_FUNC_COALESC
e1c0: 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c  E 0x0200 /* Buil
e1d0: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
e1e0: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
e1f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
e200: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34  NC_UNLIKELY 0x04
e210: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
e220: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
e230: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e240: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e250: 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e  NT 0x0800 /* Con
e260: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
e270: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
e280: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
e290: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
e2a0: 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72  X   0x1000 /* Tr
e2b0: 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64  ue for min() and
e2c0: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
e2d0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e2e0: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
e2f0: 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f    0x2000 /* "Slo
e300: 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65  w Change". Value
e310: 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67   constant during
e320: 20 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   a.             
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65         ** single
e350: 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63   query - might c
e360: 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20  hange over time 
e370: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
e380: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
e390: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
e3a0: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
e3b0: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
e3c0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
e3d0: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
e3e0: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
e3f0: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
e400: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
e410: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
e420: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
e430: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
e440: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
e450: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
e460: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
e470: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
e480: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
e490: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
e4a0: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
e4b0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
e4c0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
e4d0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
e4e0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
e4f0: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
e500: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
e510: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
e520: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
e530: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
e540: 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
e550: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
e560: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
e570: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
e580: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
e590: 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
e5a0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
e5b0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
e5c0: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
e5d0: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
e5e0: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
e5f0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
e600: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
e610: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
e620: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
e630: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
e640: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
e650: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
e660: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
e670: 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
e680: 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
e690: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
e6a0: 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
e6b0: 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
e6c0: 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
e6d0: 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
e6e0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
e6f0: 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
e700: 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
e710: 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
e720: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 41  query..**.**   A
e730: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
e740: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e750: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
e760: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
e770: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
e780: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
e790: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
e7a0: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
e7b0: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
e7c0: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
e7d0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
e7e0: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
e7f0: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
e800: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
e810: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
e820: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
e830: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
e840: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
e850: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
e860: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
e870: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
e880: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
e890: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
e8a0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
e8b0: 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63  e.**     that ac
e8c0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
e8d0: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
e8e0: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
e8f0: 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75  l to C.**     fu
e900: 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
e910: 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
e920: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
e930: 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
e940: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
e950: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
e960: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
e970: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
e980: 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
e990: 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
e9a0: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
e9b0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
e9c0: 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
e9d0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
e9e0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
e9f0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ea00: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
ea10: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ea20: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
ea30: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
ea40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ea50: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
ea60: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
ea70: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
ea80: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
ea90: 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
eaa0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
eab0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
eac0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ead0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
eae0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
eaf0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
eb00: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
eb10: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
eb20: 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
eb30: 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
eb40: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
eb50: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
eb60: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
eb70: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
eb80: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
eb90: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
eba0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
ebb0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
ebc0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
ebd0: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
ebe0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
ebf0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ec00: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
ec10: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
ec20: 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
ec30: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
ec40: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
ec50: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
ec60: 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
ec70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
ec80: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
ec90: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
eca0: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  0} }.#define STR
ecb0: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
ecc0: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
ecd0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ece0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
ecf0: 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
ed00: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
ed10: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
ed20: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
ed30: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
ed40: 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55  }.#define LIKEFU
ed50: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
ed60: 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20  arg, flags) \.  
ed70: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
ed80: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
ed90: 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c  TE_UTF8|flags, \
eda0: 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  .   (void *)arg,
edb0: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
edc0: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
edd0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
ede0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
edf0: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
ee00: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
ee10: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
ee20: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ee30: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ee40: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
ee50: 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
ee60: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
ee70: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
ee80: 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
ee90: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
eea0: 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
eeb0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
eec0: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
eed0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
eee0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
eef0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
ef00: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
ef10: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
ef20: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a  #zName, {0}}../*
ef30: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
ef40: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
ef50: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
ef60: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
ef70: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
ef80: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
ef90: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
efa0: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
efb0: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
efc0: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
efd0: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
efe0: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
eff0: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
f000: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
f010: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
f020: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
f030: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
f060: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
f070: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
f080: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
f090: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
f0a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f0b0: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
f0c0: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
f0d0: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
f0e0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
f0f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
f100: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
f110: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
f120: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
f130: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
f140: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
f150: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
f160: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
f170: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
f180: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
f190: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
f1a0: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
f1b0: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
f1c0: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
f1d0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
f1e0: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
f1f0: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
f200: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
f210: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
f220: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
f230: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
f240: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
f250: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
f260: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
f270: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
f280: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
f290: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
f2a0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
f2b0: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
f2c0: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
f2d0: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
f2e0: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
f2f0: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
f300: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
f310: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
f320: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
f330: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
f340: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
f350: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
f360: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
f370: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
f380: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
f3b0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
f3c0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
f3d0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
f3e0: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
f3f0: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
f400: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
f410: 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61  .  Table *pEpoTa
f420: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
f430: 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79          /* Epony
f440: 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74  mous table for t
f450: 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b  his module */.};
f460: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
f470: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
f480: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
f490: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
f4a0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
f4b0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
f4c0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
f4d0: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
f4e0: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
f4f0: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c   of this column,
f500: 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20   \000, then the 
f510: 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  type */.  Expr *
f520: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
f530: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
f540: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
f550: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
f560: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
f570: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
f580: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
f590: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
f5a0: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
f5b0: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
f5c0: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
f5d0: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
f5e0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
f5f0: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
f600: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
f610: 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
f620: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
f630: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76  imated size of v
f640: 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c  alue in this col
f650: 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29  umn. sizeof(INT)
f660: 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
f670: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
f680: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
f690: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
f6a0: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
f6b0: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
f6c0: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
f6d0: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
f6e0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
f6f0: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
f700: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
f710: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
f720: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
f730: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
f740: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
f750: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
f760: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
f770: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
f780: 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78  FLAG_HASTYPE  0x
f790: 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20  0004    /* Type 
f7a0: 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c  name follows col
f7b0: 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a  umn name */../*.
f7c0: 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
f7d0: 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
f7e0: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
f7f0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
f800: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
f810: 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
f820: 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
f830: 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
f840: 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
f850: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
f860: 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
f870: 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
f880: 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
f890: 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
f8a0: 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
f8b0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
f8c0: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
f8d0: 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
f8e0: 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
f8f0: 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
f900: 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
f910: 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
f920: 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
f930: 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
f940: 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
f950: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
f960: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
f970: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
f980: 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
f990: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
f9b0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
f9c0: 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
f9d0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
f9e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
f9f0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
fa00: 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
fa10: 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
fa20: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
fa30: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
fa40: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
fa50: 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
fa60: 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
fa70: 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
fa80: 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
fa90: 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
faa0: 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
fab0: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
fac0: 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
fad0: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
fae0: 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
faf0: 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
fb00: 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
fb10: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
fb20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fb30: 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20  TE_SO_UNDEFINED 
fb40: 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72  -1 /* No sort or
fb50: 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f  der specified */
fb60: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
fb70: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
fb80: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
fb90: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
fba0: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
fbb0: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
fbc0: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
fbd0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
fbe0: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
fbf0: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
fc00: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
fc10: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
fc20: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
fc30: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
fc40: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a  consecutively..*
fc50: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
fc60: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
fc70: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
fc80: 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74   with 'A'.  That
fc90: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
fca0: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
fcb0: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
fcc0: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
fcd0: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
fce0: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
fcf0: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
fd00: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
fd10: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
fd20: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
fd30: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
fd40: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
fd50: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
fd60: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
fd70: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
fd80: 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74  mparison.  And t
fd90: 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20  he BLOB type is 
fda0: 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  first..*/.#defin
fdb0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  e SQLITE_AFF_BLO
fdc0: 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e  B     'A'.#defin
fdd0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
fde0: 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e  T     'B'.#defin
fdf0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
fe00: 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e  ERIC  'C'.#defin
fe10: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
fe20: 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e  EGER  'D'.#defin
fe30: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
fe40: 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69  L     'E'..#defi
fe50: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
fe60: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
fe70: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
fe80: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
fe90: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
fea0: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
feb0: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
fec0: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
fed0: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
fee0: 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ue..*/.#define S
fef0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
ff00: 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
ff10: 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
ff20: 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
ff30: 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
ff40: 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
ff50: 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
ff60: 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
ff70: 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
ff80: 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
ff90: 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
ffa0: 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
ffb0: 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
ffc0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
ffd0: 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
ffe0: 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
fff0: 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
10000 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
10010 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
10020 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
10030 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
10040 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
10050 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
10060 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
10070 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
10080 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
10090 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
100a0 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
100b0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
100c0 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
100d0 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
100e0 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
100f0 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
10100 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
10110 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
10120 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
10130 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
10140 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
10150 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
10160 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
10170 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
10180 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
10190 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
101a0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
101b0 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
101c0 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
101d0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
101e0 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  chema..**.** If 
101f0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
10200 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
10210 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
10220 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
10230 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
10240 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
10250 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
10260 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
10270 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
10280 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
10290 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
102a0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
102b0 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
102c0 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
102d0 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
102e0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
102f0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
10300 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
10310 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
10320 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
10330 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
10340 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
10350 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  een.** database 
10360 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
10370 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
10380 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
10390 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68   database.** sch
103a0 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
103b0 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
103c0 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
103d0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
103e0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
103f0 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
10400 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
10410 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
10420 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
10430 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
10440 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
10450 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
10460 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
10470 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
10480 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
10490 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
104a0 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
104b0 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69  eal tables.** wi
104c0 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
104d0 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
104e0 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
104f0 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a  f the callers.**
10500 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
10510 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
10520 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
10530 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
10540 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
10550 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
10560 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
10570 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
10580 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
10590 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
105a0 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
105b0 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
105c0 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
105d0 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
105e0 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
105f0 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
10600 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
10610 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
10620 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
10630 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
10640 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
10650 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
10660 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
10670 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
10680 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
10690 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
106a0 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
106b0 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
106c0 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
106d0 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
106e0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
106f0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
10700 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
10710 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
10720 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
10730 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
10740 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
10750 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
10760 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
10770 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
10780 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
10790 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
107a0 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
107b0 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
107c0 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
107d0 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
107e0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
107f0 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20   not.** deleted 
10800 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
10810 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
10820 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
10830 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61  t()ed.** immedia
10840 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
10850 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
10860 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
10870 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
10880 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
10890 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
108a0 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
108b0 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
108c0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
108d0 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
108e0 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
108f0 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
10900 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e  isconnected.** n
10910 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
10920 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
10930 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
10940 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
10950 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
10960 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
10970 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
10980 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
10990 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
109a0 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
109b0 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
109c0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
109d0 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
109e0 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
109f0 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
10a00 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
10a10 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
10a20 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
10a30 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
10a40 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
10a50 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
10a60 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
10a70 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
10a80 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
10a90 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
10aa0 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c  ocated by.** sql
10ab0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
10ac0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
10ad0 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
10ae0 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
10af0 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  as.** the first 
10b00 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
10b10 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
10b20 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
10b30 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
10b40 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
10b50 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10b60 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
10b70 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
10b80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
10b90 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
10ba0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
10bb0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
10bc0 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
10bd0 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
10be0 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
10bf0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
10c00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10c10 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
10c20 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
10c30 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
10c40 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
10c50 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
10c60 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
10c70 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
10c80 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
10c90 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
10ca0 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
10cb0 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
10cc0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
10cd0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
10ce0 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
10cf0 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
10d00 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
10d10 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
10d20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
10d30 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
10d40 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
10d50 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10d60 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
10d70 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
10d80 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
10d90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10da0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
10db0 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
10dc0 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
10dd0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
10de0 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
10df0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
10e00 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
10e10 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
10e20 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
10e30 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
10e40 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
10e50 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
10e60 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
10e70 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
10e80 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
10e90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
10ea0 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
10eb0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
10ec0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
10ed0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
10ee0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
10ef0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
10f00 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
10f10 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
10f20 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
10f30 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
10f40 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
10f70 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
10f80 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
10f90 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
10fb0 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
10fc0 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
10fd0 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
10fe0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
10ff0 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
11000 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
11010 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
11020 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
11030 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11040 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
11050 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
11060 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
11070 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
11080 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
11090 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
110a0 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
110b0 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
110c0 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
110d0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
110e0 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
110f0 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
11100 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
11110 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
11120 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
11130 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
11140 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
11150 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
11160 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
11170 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
11180 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
11190 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67  dif.  u8 tabFlag
111a0 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  s;         /* Ma
111b0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
111c0 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e  s */.  u8 keyCon
111d0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
111e0 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
111f0 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
11200 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
11210 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
11220 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
11230 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
11240 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
11250 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
11260 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
11270 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
11280 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
11290 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
112a0 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
112b0 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
112c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
112d0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
112e0 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
112f0 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
11300 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
11310 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
11320 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
11330 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
11340 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
11350 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
11360 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
11370 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
11380 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
11390 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
113a0 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
113b0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
113c0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
113d0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
113e0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
113f0 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
11400 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
11410 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
11420 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
11430 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
11440 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
11450 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
11460 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
11470 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69   to tables or vi
11480 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64  ew that have hid
11490 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
114a0 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
114b0 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
114c0 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
114d0 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
114e0 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
114f0 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
11500 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
11510 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
11520 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
11530 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
11540 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
11550 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
11560 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
11570 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
11580 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
11590 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
115a0 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
115b0 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
115c0 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
115d0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
115e0 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
115f0 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
11600 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
11610 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
11620 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
11630 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
11640 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
11650 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
11660 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
11670 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
11680 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
11690 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
116a0 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
116b0 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
116c0 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
116d0 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
116e0 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
116f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11700 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
11710 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
11720 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
11730 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
11740 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
11750 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
11760 62 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20 20  bleRowid  0x40  
11770 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73    /* No user-vis
11780 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c  ible "rowid" col
11790 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  umn */.#define T
117a0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20  F_OOOHidden     
117b0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74    0x80    /* Out
117c0 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
117d0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a   columns */.../*
117e0 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
117f0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
11800 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
11810 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
11820 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
11830 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
11840 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
11850 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
11860 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
11870 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
11880 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
11890 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
118a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
118b0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
118c0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
118d0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
118e0 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
118f0 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
11900 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
11910 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
11920 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
11930 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
11940 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
11950 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
11960 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
11970 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
11980 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
11990 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
119a0 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
119b0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
119c0 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
119d0 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
119e0 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
119f0 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
11a00 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
11a10 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
11a20 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
11a30 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
11a40 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
11a50 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
11a60 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
11a70 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
11a80 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
11a90 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
11aa0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
11ab0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
11ac0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
11ad0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
11ae0 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
11af0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
11b00 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
11b10 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
11b20 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
11b30 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
11b40 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
11b50 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
11b60 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
11b70 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
11b80 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
11b90 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
11ba0 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
11bb0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
11bc0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
11bd0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
11be0 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
11bf0 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
11c00 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
11c10 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
11c20 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
11c30 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
11c40 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
11c50 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
11c60 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
11c70 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
11c80 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
11c90 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
11ca0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
11cb0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11cc0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
11cd0 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
11ce0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11cf0 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
11d00 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
11d10 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
11d20 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
11d30 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
11d40 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
11d50 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
11d60 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
11d70 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
11d80 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
11d90 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
11da0 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
11db0 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
11dc0 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
11dd0 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
11de0 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
11df0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
11e00 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
11e10 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
11e20 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
11e30 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
11e40 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
11e50 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
11e60 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
11e70 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
11e80 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
11e90 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
11ea0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
11eb0 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
11ec0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
11ed0 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
11ee0 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
11ef0 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
11f00 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
11f10 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11f20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11f30 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
11f40 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
11f50 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
11f60 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
11f70 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
11f80 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
11f90 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
11fa0 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
11fb0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
11fc0 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
11fd0 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
11fe0 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
11ff0 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
12000 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
12010 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
12020 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
12030 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
12040 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
12050 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
12060 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
12070 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
12080 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
12090 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
120a0 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
120b0 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
120c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
120d0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
120e0 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
120f0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
12100 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
12110 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
12120 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
12130 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
12140 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
12150 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
12160 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
12170 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
12180 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
12190 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
121a0 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
121b0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
121c0 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
121d0 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
121e0 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
121f0 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
12200 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
12210 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
12220 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12230 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
12240 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
12250 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
12260 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
12270 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
12280 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
12290 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
122a0 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
122b0 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
122c0 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
122d0 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
122e0 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
122f0 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
12300 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
12310 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
12320 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
12330 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
12340 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
12350 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
12360 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
12370 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
12380 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
12390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
123a0 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
123b0 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
123c0 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
123d0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
123e0 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
123f0 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
12400 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
12410 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
12420 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
12430 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
12440 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
12450 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
12460 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
12470 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
12480 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
12490 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
124a0 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
124b0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
124c0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
124d0 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
124e0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
124f0 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
12500 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
12510 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
12520 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
12530 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
12540 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
12550 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
12560 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
12570 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
12580 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
12590 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
125a0 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
125b0 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
125c0 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
125d0 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
125e0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
125f0 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
12600 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
12610 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
12620 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
12630 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
12640 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
12650 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
12660 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
12670 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
12680 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
12690 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
126a0 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
126b0 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
126c0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
126d0 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
126e0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
126f0 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
12700 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
12710 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
12720 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
12730 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
12740 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
12750 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
12760 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
12770 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
12780 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
12790 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
127a0 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
127b0 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
127c0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
127d0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
127e0 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
127f0 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
12800 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
12810 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
12820 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
12830 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
12840 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
12850 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
12860 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
12870 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
12880 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
12890 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
128a0 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
128b0 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
128c0 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
128d0 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
128e0 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
128f0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
12900 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
12910 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
12920 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
12930 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
12940 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
12950 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
12960 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
12970 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
12980 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
12990 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
129a0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
129b0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
129c0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
129d0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
129e0 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
129f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
12a00 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
12a10 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
12a20 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
12a30 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
12a40 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
12a50 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
12a60 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
12a70 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
12a80 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
12a90 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
12aa0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
12ab0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
12ac0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
12ad0 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
12ae0 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
12af0 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
12b00 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
12b10 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
12b20 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
12b30 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
12b40 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
12b50 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
12b60 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
12b70 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
12b80 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
12b90 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
12ba0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
12bb0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
12bc0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
12bd0 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
12be0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
12bf0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
12c00 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
12c10 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
12c20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
12c30 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
12c40 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
12c50 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
12c60 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
12c70 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
12c80 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
12c90 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
12ca0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
12cb0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
12cc0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
12cd0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12ce0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12cf0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
12d00 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
12d10 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
12d20 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
12d30 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
12d40 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
12d50 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
12d60 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
12d70 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
12d80 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
12d90 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
12da0 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
12db0 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
12dc0 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
12dd0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
12de0 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
12df0 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
12e00 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
12e10 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
12e20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
12e30 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
12e40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
12e50 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
12e60 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
12e70 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
12e80 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
12e90 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
12ea0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
12eb0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
12ec0 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
12ed0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
12ee0 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
12ef0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
12f00 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20   nXField;       
12f10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12f20 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65  lumns beyond the
12f30 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   key columns */.
12f40 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
12f50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
12f60 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12f70 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
12f80 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
12f90 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
12fa0 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
12fb0 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
12fc0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
12fd0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
12fe0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
12ff0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
13000 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
13010 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68  a record which h
13020 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  as been parsed o
13030 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
13040 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f  al.** fields, fo
13050 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
13060 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72  f doing a compar
13070 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  ison..**.** A re
13080 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
13090 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
130a0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
130b0 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
130c0 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
130d0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
130e0 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
130f0 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
13100 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
13110 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
13120 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
13130 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
13140 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
13150 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
13160 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
13170 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
13180 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
13190 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
131a0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
131b0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72   this object ser
131c0 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66  ves as a "key" f
131d0 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63  or doing a searc
131e0 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  h on.** an index
131f0 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61   b+tree. The goa
13200 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  l of the search 
13210 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  is to find the e
13220 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  ntry that.** is 
13230 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65  closed to the ke
13240 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  y described by t
13250 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69  his object.  Thi
13260 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68  s object might h
13270 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72  old.** just a pr
13280 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e  efix of the key.
13290 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
132a0 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20  fields is given 
132b0 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e  by.** pKeyInfo->
132c0 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  nField..**.** Th
132d0 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c  e r1 and r2 fiel
132e0 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65  ds are the value
132f0 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74  s to return if t
13300 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20  his key is less 
13310 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74  than.** or great
13320 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e  er than a key in
13330 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70   the btree, resp
13340 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65  ectively.  These
13350 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a   are normally.**
13360 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65   -1 and +1 respe
13370 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67  ctively, but mig
13380 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74  ht be inverted t
13390 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74  o +1 and -1 if t
133a0 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20  he b-tree.** is 
133b0 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a  in DESC order..*
133c0 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
133d0 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
133e0 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  s actually retur
133f0 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65  n default_rc whe
13400 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61  n they find.** a
13410 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69  n equals compari
13420 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63  son.  default_rc
13430 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f   can be -1, 0, o
13440 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20  r +1.  If there 
13450 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  are.** multiple 
13460 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62  entries in the b
13470 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73  -tree with the s
13480 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e  ame key (when on
13490 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74  ly looking.** at
134a0 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49   the first pKeyI
134b0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74  nfo->nFields,) t
134c0 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63  hen default_rc c
134d0 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20  an be set to -1 
134e0 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  to.** cause the 
134f0 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
13500 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
13510 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
13520 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
13530 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
13540 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
13550 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
13560 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
13570 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
13580 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
13590 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
135a0 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
135b0 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
135c0 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
135d0 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
135e0 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
135f0 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
13600 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
13610 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
13620 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
13630 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
13640 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
13650 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
13660 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
13670 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
13680 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
13690 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
136a0 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
136b0 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
136c0 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
136d0 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
136e0 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
136f0 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
13700 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
13710 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
13720 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
13730 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
13740 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
13750 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
13760 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
13770 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
13780 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
13790 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
137a0 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
137b0 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
137c0 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
137d0 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
137e0 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
137f0 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
13800 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
13810 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
13820 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
13830 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs > rhs) */.  i
13840 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
13850 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
13860 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20  eturn if (rhs < 
13870 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  lhs) */.  u8 eqS
13880 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
13890 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
138a0 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
138b0 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
138c0 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
138d0 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
138e0 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
138f0 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
13900 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13910 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
13930 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
13940 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
13950 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
13960 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
13970 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
13980 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
13990 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
139a0 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
139b0 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
139c0 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
139d0 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
139e0 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
139f0 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
13a00 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
13a10 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
13a20 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
13a30 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
13a40 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
13a50 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
13a60 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
13a70 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
13a80 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
13a90 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
13aa0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
13ab0 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
13ac0 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
13ad0 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
13ae0 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
13af0 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
13b00 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
13b10 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
13b20 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
13b30 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73  ause the.** firs
13b40 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
13b50 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
13b60 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
13b70 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
13b80 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
13b90 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
13ba0 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
13bb0 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
13bc0 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
13bd0 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
13be0 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
13bf0 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
13c00 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
13c10 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
13c20 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
13c30 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
13c40 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
13c50 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
13c60 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
13c70 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
13c80 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
13c90 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
13ca0 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
13cb0 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
13cc0 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
13cd0 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
13ce0 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
13cf0 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
13d00 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a  ict resolution.*
13d10 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
13d20 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
13d30 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
13d40 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
13d50 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
13d60 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
13d70 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
13d80 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
13d90 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
13da0 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
13db0 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
13dc0 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
13dd0 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
13de0 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
13df0 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
13e00 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
13e10 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
13e20 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
13e30 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
13e40 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
13e50 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
13e60 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
13e70 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
13e80 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
13e90 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
13ea0 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
13eb0 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
13ec0 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
13ed0 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
13ee0 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
13ef0 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
13f00 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
13f10 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
13f20 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
13f30 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
13f40 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
13f50 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
13f60 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
13f70 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
13f80 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
13f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
13fa0 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
13fb0 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
13fc0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
13fd0 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
13fe0 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
13ff0 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
14000 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
14010 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
14020 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
14030 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
14040 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
14050 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
14060 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
14070 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
14080 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
14090 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
140a0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
140b0 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
140c0 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
140d0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
140e0 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
140f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14100 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
14110 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
14120 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
14130 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
14140 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
14150 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
14160 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
14170 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
14180 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
14190 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
141a0 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
141b0 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  C */.  const cha
141c0 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
141d0 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
141e0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
141f0 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
14200 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
14210 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
14220 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
14230 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
14240 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
14250 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f  aColExpr;      /
14260 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * Column express
14270 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ions */.  int tn
14280 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
14290 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
142a0 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
142b0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
142c0 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
142d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
142e0 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
142f0 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
14300 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
14310 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
14320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14330 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
14340 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
14350 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
14360 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
14370 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
14380 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
14390 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
143a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
143b0 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
143c0 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
143d0 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
143e0 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
143f0 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
14400 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
14410 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
14420 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
14430 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
14440 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
14450 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
14460 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
14470 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
14480 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
14490 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
144a0 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
144b0 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
144c0 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
144d0 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
144e0 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
144f0 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
14500 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
14510 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
14520 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
14530 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
14540 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
14550 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
14560 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
14570 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
14580 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
14590 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
145a0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
145b0 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
145c0 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
145d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
145e0 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
145f0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
14600 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
14610 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
14620 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
14630 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
14640 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
14650 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
14660 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
14670 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
14680 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
14690 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
146a0 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
146b0 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
146c0 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
146d0 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
146e0 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
146f0 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
14700 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
14710 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
14720 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
14730 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
14740 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
14750 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
14760 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
14770 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
14780 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
14790 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
147a0 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
147b0 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
147c0 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
147d0 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
147e0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
147f0 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
14800 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
14810 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
14820 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
14830 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
14840 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
14850 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
14860 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
14870 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
14880 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
14890 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
148a0 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
148b0 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
148c0 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
148d0 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
148e0 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
148f0 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
14900 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
14910 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
14920 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
14930 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
14940 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
14950 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
14960 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
14970 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
14980 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
14990 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
149a0 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
149b0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
149c0 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
149d0 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
149e0 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
149f0 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
14a00 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
14a10 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
14a20 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
14a30 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
14a40 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
14a50 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
14a60 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
14a70 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
14a80 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
14a90 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
14aa0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
14ab0 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
14ac0 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
14ad0 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
14ae0 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
14af0 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
14b00 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
14b10 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
14b20 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
14b30 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
14b40 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
14b50 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
14b60 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
14b70 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
14b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
14b90 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
14ba0 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
14bb0 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
14bc0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
14bd0 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
14be0 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
14bf0 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
14c00 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
14c10 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
14c20 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
14c30 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
14c40 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
14c50 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
14c60 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
14c70 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
14c80 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
14c90 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
14ca0 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
14cb0 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
14cc0 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
14cd0 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
14ce0 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
14cf0 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
14d00 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
14d10 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
14d20 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
14d30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
14d40 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
14d50 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
14d60 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
14d70 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
14d80 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
14d90 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
14da0 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
14db0 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
14dc0 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
14dd0 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
14de0 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
14df0 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
14e00 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
14e10 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
14e20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
14e30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14e40 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
14e50 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
14e60 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
14e70 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
14e80 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
14e90 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
14ea0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
14eb0 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
14ec0 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
14ed0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
14ee0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
14ef0 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
14f00 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
14f10 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
14f20 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
14f30 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
14f40 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
14f50 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
14f60 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
14f70 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
14f80 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
14f90 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
14fa0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
14fb0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
14fc0 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
14fd0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
14fe0 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
14ff0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
15000 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
15010 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
15020 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
15030 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
15040 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
15050 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
15060 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
15070 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
15080 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
15090 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
150a0 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
150b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
150c0 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
150d0 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
150e0 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
150f0 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
15100 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
15110 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
15120 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
15130 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
15140 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
15150 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
15160 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
15170 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
15180 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
15190 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
151a0 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
151b0 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
151d0 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
151e0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
151f0 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
15200 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
15210 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
15220 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
15230 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
15240 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
15250 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
15260 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
15270 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
15280 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15290 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
152a0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
152b0 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
152c0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
152d0 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
152e0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
152f0 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
15300 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
15310 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
15320 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
15330 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
15340 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
15350 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
15360 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
15370 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
15380 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
15390 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
153a0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
153b0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
153c0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
153d0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
153e0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
153f0 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15410 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
15420 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
15430 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
15440 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
15450 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
15460 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
15470 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
15480 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
15490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
154a0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
154b0 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
154c0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
154d0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
154e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
154f0 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
15500 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
15510 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
15520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15530 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
15540 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
15550 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
15560 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
15570 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15580 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
15590 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
155a0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
155b0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
155c0 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
155d0 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
155e0 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
155f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15600 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
15610 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15620 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
15630 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
15640 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
15650 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
15660 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
15670 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15680 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
15690 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
156a0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
156b0 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
156c0 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
156d0 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
156e0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
156f0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
15700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
15710 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
15720 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
15730 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
15740 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
15750 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
15760 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
15770 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
15780 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
15790 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
157a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
157b0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
157c0 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
157d0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
157e0 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
157f0 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
15800 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
15810 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
15820 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
15830 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
15840 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
15850 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
15860 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
15870 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
15880 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
15890 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
158a0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
158b0 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
158c0 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
158d0 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
158e0 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
158f0 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
15900 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
15910 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
15920 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
15930 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
15940 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
15950 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
15960 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
15970 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
15980 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
15990 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
159a0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
159b0 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
159c0 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
159d0 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
159e0 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
159f0 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
15a00 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
15a10 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
15a20 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
15a30 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
15a40 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
15a50 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
15a60 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
15a70 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
15a80 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
15a90 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
15aa0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
15ab0 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
15ac0 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
15ad0 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
15ae0 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
15af0 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
15b00 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
15b10 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
15b20 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
15b30 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
15b40 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
15b50 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
15b60 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
15b70 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
15b80 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
15b90 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
15ba0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
15bb0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
15bc0 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
15bd0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
15be0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
15bf0 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
15c00 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
15c10 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
15c20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
15c30 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
15c40 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
15c50 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
15c60 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
15c70 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
15c80 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
15c90 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
15ca0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
15cb0 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
15cc0 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
15cd0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15ce0 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
15cf0 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
15d00 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
15d10 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
15d20 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
15d30 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
15d40 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
15d50 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
15d60 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
15d70 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
15d80 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
15d90 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
15da0 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
15db0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
15dc0 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
15dd0 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
15de0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15df0 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
15e00 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
15e10 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
15e20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
15e30 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
15e40 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
15e50 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
15e60 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
15e70 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
15e80 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
15e90 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
15ea0 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
15eb0 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
15ec0 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
15ed0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
15ee0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
15ef0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
15f00 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
15f10 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
15f20 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
15f30 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
15f40 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
15f50 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
15f60 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
15f70 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
15f80 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
15f90 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
15fa0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
15fb0 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
15fc0 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
15fd0 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
15fe0 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
15ff0 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
16000 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
16010 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
16020 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
16030 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
16040 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
16050 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
16060 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
16070 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
16080 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
16090 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
160a0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
160b0 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
160c0 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
160d0 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
160e0 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
160f0 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
16100 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
16110 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
16120 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
16130 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
16140 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
16150 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
16160 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
16170 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
16180 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
16190 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
161a0 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
161b0 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
161c0 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
161d0 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
161e0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
161f0 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
16200 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
16210 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
16220 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
16230 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
16240 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
16250 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
16260 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
16270 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
16280 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
16290 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
162a0 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
162b0 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
162c0 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
162d0 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
162e0 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
162f0 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
16300 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
16310 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
16320 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
16330 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
16340 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
16350 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
16360 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
16370 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
16380 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
16390 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
163a0 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
163b0 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
163c0 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
163d0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
163e0 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
163f0 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
16400 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
16410 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
16420 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
16430 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
16440 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
16450 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
16460 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
16470 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
16480 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
16490 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
164a0 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
164b0 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
164c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
164d0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
164e0 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
164f0 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
16500 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
16510 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
16520 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
16530 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
16540 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
16550 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
16560 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
16570 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
16580 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
16590 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
165a0 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
165b0 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
165c0 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
165d0 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
165e0 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
165f0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
16600 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
16610 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
16620 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
16630 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
16640 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
16650 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
16660 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
16670 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
16680 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
16690 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
166a0 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
166b0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
166c0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
166d0 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
166e0 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
166f0 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
16700 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
16710 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
16720 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
16730 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
16740 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
16750 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
16760 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
16770 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
16780 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
16790 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
167a0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
167b0 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
167c0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
167d0 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
167e0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
167f0 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
16800 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
16810 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
16820 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
16830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
16840 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
16850 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
16860 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
16870 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
16880 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
16890 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
168a0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
168b0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
168c0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
168d0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
168e0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
168f0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
16900 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
16910 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
16920 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
16930 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
16940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16980 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
16990 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
169a0 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
169b0 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
169c0 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
169d0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
169e0 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
169f0 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
16a00 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
16a10 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
16a20 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
16a30 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
16a40 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
16a50 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
16a60 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
16a70 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
16a80 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
16a90 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
16aa0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
16ab0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
16ac0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
16ad0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
16ae0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
16af0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
16b00 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
16b10 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
16b20 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
16b30 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
16b40 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
16b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16b90 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
16ba0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
16bb0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
16bc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
16bd0 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
16be0 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
16bf0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
16c00 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
16c10 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
16c20 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
16c30 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
16c40 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
16c70 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
16c80 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16ca0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
16cb0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
16ce0 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
16cf0 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
16d00 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  ood */.  ynVar i
16d10 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16d20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
16d30 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
16d40 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
16d70 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
16d80 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
16d90 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  ). */.  i16 iAgg
16da0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16db0 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
16dc0 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
16dd0 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
16de0 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
16df0 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
16e00 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
16e10 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
16e20 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
16e30 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
16e40 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
16e50 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
16e60 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
16e90 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
16ea0 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
16eb0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16ed0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
16ee0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
16ef0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
16f00 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
16f10 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
16f20 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
16f30 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
16f40 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
16f50 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
16f60 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
16f70 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a  essions. */.};..
16f80 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
16f90 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
16fa0 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
16fb0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
16fc0 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
16fd0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
16fe0 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
16ff0 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
17000 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
17010 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
17020 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78   EP_Agg       0x
17030 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69  000002 /* Contai
17040 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  ns one or more a
17050 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17060 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
17070 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30  _Resolved  0x000
17080 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20  004 /* IDs have 
17090 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f  been resolved to
170a0 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66   COLUMNs */.#def
170b0 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20  ine EP_Error    
170c0 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70   0x000008 /* Exp
170d0 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73  ression contains
170e0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72   one or more err
170f0 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ors */.#define E
17100 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30  P_Distinct  0x00
17110 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74  0010 /* Aggregat
17120 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  e function with 
17130 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
17140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56   */.#define EP_V
17150 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32  arSelect 0x00002
17160 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20  0 /* pSelect is 
17170 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20  correlated, not 
17180 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66  constant */.#def
17190 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64  ine EP_DblQuoted
171a0 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b   0x000040 /* tok
171b0 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61  en.z was origina
171c0 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a  lly in "..." */.
171d0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78  #define EP_Infix
171e0 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a  Func 0x000080 /*
171f0 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66   True for an inf
17200 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b  ix function: LIK
17210 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a  E, GLOB, etc */.
17220 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61  #define EP_Colla
17230 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a  te   0x000100 /*
17240 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
17250 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72   TK_COLLATE oper
17260 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
17270 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30  EP_Generic   0x0
17280 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20  00200 /* Ignore 
17290 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e  COLLATE or affin
172a0 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65  ity on this tree
172b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
172c0 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30  ntValue  0x00040
172d0 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c  0 /* Integer val
172e0 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
172f0 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66  u.iValue */.#def
17300 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  ine EP_xIsSelect
17310 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70   0x000800 /* x.p
17320 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20  Select is valid 
17330 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69  (otherwise x.pLi
17340 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e  st is) */.#defin
17350 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30  e EP_Skip      0
17360 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41  x001000 /* COLLA
17370 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b  TE, AS, or UNLIK
17380 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ELY */.#define E
17390 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30  P_Reduced   0x00
173a0 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  2000 /* Expr str
173b0 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44  uct EXPR_REDUCED
173c0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
173d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f  */.#define EP_To
173e0 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30  kenOnly 0x004000
173f0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
17400 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
17410 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
17420 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
17430 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f  ic    0x008000 /
17440 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
17450 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
17460 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
17470 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b  define EP_MemTok
17480 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20  en  0x010000 /* 
17490 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
174a0 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
174b0 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
174c0 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32  P_NoReduce  0x02
174d0 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  0000 /* Cannot E
174e0 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
174f0 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69  is Expr */.#defi
17500 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20  ne EP_Unlikely  
17510 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69  0x040000 /* unli
17520 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69  kely() or likeli
17530 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  hood() function 
17540 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
17550 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30  nstFunc 0x080000
17560 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e   /* A SQLITE_FUN
17570 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53  C_CONSTANT or _S
17580 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20  LOCHNG function 
17590 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61  */.#define EP_Ca
175a0 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30  nBeNull 0x100000
175b0 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20   /* Can be null 
175c0 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c  despite NOT NULL
175d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
175e0 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65  define EP_Subque
175f0 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20  ry  0x200000 /* 
17600 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
17610 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74  TK_SELECT operat
17620 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
17630 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30 30  _Alias     0x400
17640 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69  000 /* Is an ali
17650 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20  as for a result 
17660 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f  set column */../
17670 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
17680 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
17690 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
176a0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
176b0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
176c0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
176d0 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
176e0 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
176f0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
17700 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
17710 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
17720 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
17730 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
17740 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
17750 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
17760 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
17770 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
17780 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
17790 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
177a0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
177b0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
177c0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
177d0 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
177e0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
177f0 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
17800 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
17810 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
17820 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
17830 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
17840 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
17850 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
17860 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
17870 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
17880 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
17890 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
178a0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
178b0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
178c0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
178d0 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
178e0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
178f0 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
17900 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
17910 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
17920 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
17930 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
17940 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
17950 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
17960 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
17970 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
17980 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
17990 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
179a0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
179b0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
179c0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
179d0 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
179e0 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
179f0 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
17a00 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
17a10 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
17a20 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
17a30 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
17a40 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
17a50 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
17a60 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
17a70 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
17a80 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
17a90 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
17aa0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
17ab0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
17ac0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
17ad0 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
17ae0 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
17af0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
17b00 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
17b10 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
17b20 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
17b30 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
17b40 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
17b50 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
17b60 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
17b70 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
17b80 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
17b90 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
17ba0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
17bb0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
17bc0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
17bd0 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
17be0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
17bf0 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
17c00 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
17c10 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
17c20 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
17c30 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
17c40 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
17c50 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
17c60 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
17c70 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
17c80 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
17c90 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
17ca0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
17cb0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
17cc0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
17cd0 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
17ce0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
17cf0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
17d00 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
17d10 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
17d20 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
17d30 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
17d40 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
17d50 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
17d60 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
17d70 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
17d80 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
17d90 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
17da0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
17db0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
17dc0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
17dd0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
17de0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
17df0 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
17e00 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
17e10 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
17e20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
17e30 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
17e40 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
17e50 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
17e60 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
17e70 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
17e80 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
17e90 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
17ea0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
17eb0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
17ec0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
17ed0 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
17ee0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
17ef0 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
17f00 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
17f10 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
17f20 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
17f30 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
17f40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17f50 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
17f60 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
17f70 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
17f80 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
17f90 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
17fa0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
17fb0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
17fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
17fd0 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
17fe0 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
17ff0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
18000 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
18010 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
18020 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
18030 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
18040 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18050 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
18060 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18070 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
18080 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
18090 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
180a0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
180b0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
180c0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
180d0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
180e0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
180f0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
18100 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
18110 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
18120 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
18130 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
18140 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
18150 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
18160 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
18170 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
18180 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
18190 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
181a0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
181b0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
181c0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
181d0 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
181e0 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
181f0 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
18200 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
18210 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
18220 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
18230 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
18240 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
18250 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
18260 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
18270 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
18280 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
18290 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
182a0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
182b0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
182c0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
182d0 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
182e0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
182f0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
18300 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
18310 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
18320 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
18330 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
18340 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
18350 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
18360 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
18370 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
18380 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
18390 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
183a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
183b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
183c0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
183d0 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
183e0 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
183f0 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
18400 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
18410 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
18420 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
18430 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
18440 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
18450 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
18460 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
18470 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
18480 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
18490 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
184a0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
184b0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
184c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
184d0 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
184e0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
184f0 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
18500 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
18510 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
18520 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
18530 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
18540 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
18550 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
18560 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
18570 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
18580 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
18590 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
185a0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
185b0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
185c0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
185d0 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
185e0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
185f0 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
18600 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
18610 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
18620 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
18630 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
18640 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
18650 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
18660 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
18670 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
18680 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
18690 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
186a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
186b0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
186c0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
186d0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
186e0 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
186f0 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
18700 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
18710 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
18720 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
18730 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
18740 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
18750 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
18760 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
18770 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
18780 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
18790 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
187a0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
187b0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
187c0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
187d0 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
187e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
187f0 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
18800 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
18810 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
18820 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
18830 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
18840 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
18850 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23  es on ix86..*/.#
18860 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  ifdef SQLITE_BIT
18870 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65  MASK_TYPE.  type
18880 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
18890 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b  SK_TYPE Bitmask;
188a0 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
188b0 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65   u64 Bitmask;.#e
188c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
188d0 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69  number of bits i
188e0 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42  n a Bitmask.  "B
188f0 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61  MS" means "BitMa
18900 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65  sk Size"..*/.#de
18910 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29  fine BMS  ((int)
18920 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29  (sizeof(Bitmask)
18930 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69  *8))../*.** A bi
18940 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a  t in a Bitmask.*
18950 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  /.#define MASKBI
18960 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73  T(n)   (((Bitmas
18970 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  k)1)<<(n)).#defi
18980 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20  ne MASKBIT32(n) 
18990 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  (((unsigned int)
189a0 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
189b0 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28   ALLBITS      ((
189c0 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a  Bitmask)-1)../*.
189d0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
189e0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
189f0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
18a00 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
18a10 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
18a20 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
18a30 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
18a40 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
18a50 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
18a60 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
18a70 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
18a80 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
18a90 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
18aa0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
18ab0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
18ac0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
18ad0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
18ae0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
18af0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
18b00 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
18b10 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
18b20 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
18b30 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
18b40 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
18b50 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
18b60 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
18b70 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
18b80 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
18b90 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
18ba0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
18bb0 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
18bc0 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
18bd0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
18be0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
18bf0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
18c00 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
18c10 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
18c20 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
18c30 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
18c40 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
18c50 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
18c60 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
18c70 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
18c80 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
18c90 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
18ca0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
18cb0 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
18cc0 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
18cd0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
18ce0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
18cf0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
18d00 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
18d10 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
18d20 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
18d30 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
18d40 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
18d50 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
18d60 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
18d70 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
18d80 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
18d90 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
18da0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
18db0 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
18dc0 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
18dd0 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
18de0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
18df0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
18e00 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
18e10 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
18e20 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
18e30 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
18e40 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
18e50 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
18e60 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
18e70 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
18e80 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
18e90 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
18ea0 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
18eb0 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
18ec0 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
18ed0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
18ee0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
18ef0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
18f00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
18f10 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
18f20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
18f30 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
18f40 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
18f50 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
18f60 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
18f70 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
18f80 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
18f90 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
18fa0 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
18fb0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
18fc0 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
18fd0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
18fe0 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
18ff0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
19000 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
19010 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
19020 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
19030 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
19040 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
19050 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
19060 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
19070 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
19080 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
19090 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
190a0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
190b0 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
190c0 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
190d0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
190e0 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
190f0 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
19100 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
19110 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
19120 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
19130 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
19140 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
19150 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
19160 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
19170 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
19180 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
19190 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
191a0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
191b0 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
191c0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
191d0 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
191e0 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
191f0 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
19200 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
19210 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
19220 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
19230 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
19240 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
19250 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
19260 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
19270 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
19280 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
19290 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
192a0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
192b0 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
192c0 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
192d0 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
192e0 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
192f0 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
19300 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
19310 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
19320 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
19330 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
19340 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
19350 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
19360 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
19370 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
19380 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
19390 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
193a0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
193b0 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
193c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
193d0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
193e0 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
193f0 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
19400 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
19410 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
19420 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
19430 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
19440 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
19450 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
19460 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
19470 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
19480 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
19490 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
194a0 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
194b0 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
194c0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
194d0 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
194e0 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
194f0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
19500 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
19510 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
19520 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
19530 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
19540 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
19550 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19570 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
19580 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
19590 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
195a0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
195b0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
195c0 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
195d0 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
195e0 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
195f0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
19600 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
19610 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
19620 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
19630 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
19640 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
19650 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
19660 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
19670 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
19680 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
19690 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
196a0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
196b0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
196c0 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
196d0 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
196e0 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
196f0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
19700 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
19710 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
19720 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
19730 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
19740 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
19750 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
19760 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
19770 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
19780 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
19790 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
197a0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
197b0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
197c0 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
197d0 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
197e0 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
197f0 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
19800 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
19810 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
19820 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
19830 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
19840 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
19850 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
19860 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
19870 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
19880 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
19890 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
198a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
198b0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
198c0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
198d0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
198e0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
198f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
19900 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
19910 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
19920 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
19930 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
19940 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
19950 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
19960 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
19970 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
19980 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
19990 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
199a0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
199b0 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
199c0 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
199d0 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
199e0 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
199f0 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
19a00 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
19a10 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
19a20 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
19a30 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
19a40 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
19a50 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
19a60 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
19a70 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
19a80 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
19a90 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
19aa0 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
19ab0 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
19ac0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e  .#define WHERE_N
19ad0 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20  O_AUTOINDEX     
19ae0 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c  0x0080 /* Disall
19af0 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  ow automatic ind
19b00 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
19b10 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
19b20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
19b30 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
19b40 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
19b50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19b60 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
19b70 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
19b80 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
19b90 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
19ba0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19bb0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
19bc0 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
19bd0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
19be0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
19bf0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
19c00 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
19c10 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
19c20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
19c30 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
19c40 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
19c50 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
19c60 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
19c70 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64  _ReopenIdx */.#d
19c80 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
19c90 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32  ASS_MULTIROW 0x2
19ca0 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  000 /* ONEPASS i
19cb0 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
19cc0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
19cd0 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
19ce0 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
19cf0 20 2f 2a 20 54 68 65 72 65 20 69 73 20 61 20 63   /* There is a c
19d00 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 63 6c  onstant LIMIT cl
19d10 61 75 73 65 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  ause */../* Allo
19d20 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
19d30 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
19d40 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
19d50 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19d60 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
19d70 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
19d80 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
19d90 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
19da0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
19db0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
19dc0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
19dd0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
19de0 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
19df0 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
19e00 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
19e10 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
19e20 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
19e30 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
19e40 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
19e50 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
19e60 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
19e70 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
19e80 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
19e90 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
19ea0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
19eb0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
19ec0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
19ed0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
19ee0 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
19ef0 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
19f00 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
19f10 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
19f20 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
19f30 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
19f40 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
19f50 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
19f60 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
19f70 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
19f80 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
19f90 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
19fa0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
19fb0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
19fc0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
19fd0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
19fe0 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
19ff0 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
1a000 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
1a010 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1a020 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
1a030 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
1a040 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
1a050 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
1a060 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
1a070 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
1a080 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
1a090 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
1a0a0 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
1a0b0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
1a0c0 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
1a0d0 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
1a0e0 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
1a0f0 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
1a100 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
1a110 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
1a120 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
1a130 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
1a140 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
1a150 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
1a160 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
1a170 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
1a180 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
1a190 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
1a1a0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
1a1b0 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
1a1c0 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
1a1d0 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
1a1e0 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
1a1f0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
1a200 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
1a210 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
1a220 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
1a230 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
1a240 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
1a250 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1a260 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
1a270 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
1a280 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
1a290 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
1a2a0 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
1a2b0 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
1a2c0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1a2d0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
1a2e0 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
1a2f0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1a300 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
1a310 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
1a320 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
1a330 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1a340 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
1a350 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
1a360 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
1a370 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
1a380 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
1a390 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
1a3a0 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
1a3b0 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
1a3c0 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
1a3d0 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
1a3e0 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
1a3f0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
1a400 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
1a410 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a420 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
1a430 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
1a440 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
1a450 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1a460 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1a470 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
1a480 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
1a490 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
1a4a0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
1a4b0 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
1a4c0 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
1a4d0 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
1a4e0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1a4f0 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
1a500 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
1a510 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61   field..**.** Va
1a520 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1a530 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1a540 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1a550 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d    NC_HasAgg    =
1a560 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = SF_HasAgg.**  
1a570 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d    NC_MinMaxAgg =
1a580 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d  = SF_MinMaxAgg =
1a590 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1a5a0 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  NMAX.**.*/.#defi
1a5b0 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
1a5c0 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
1a5d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
1a5e0 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1a5f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
1a600 72 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20  rtIdx   0x0002  
1a610 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1a620 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
1a630 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
1a640 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b  efine NC_IsCheck
1a650 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72     0x0004  /* Tr
1a660 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1a670 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
1a680 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
1a690 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
1a6a0 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54  unc 0x0008  /* T
1a6b0 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67  rue if analyzing
1a6c0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e   arguments to an
1a6d0 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65   agg func */.#de
1a6e0 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
1a6f0 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65    0x0010  /* One
1a700 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
1a710 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
1a720 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1a730 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30  IdxExpr   0x0020
1a740 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1a750 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  olving columns o
1a760 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  f CREATE INDEX *
1a770 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1a780 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1a790 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1a7a0 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1a7b0 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
1a7c0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1a7d0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1a7e0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1a7f0 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
1a800 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
1a810 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
1a820 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
1a830 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1a840 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
1a850 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
1a860 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
1a870 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
1a880 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
1a890 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
1a8a0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
1a8b0 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
1a8c0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
1a8d0 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
1a8e0 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
1a8f0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
1a900 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
1a910 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
1a920 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
1a930 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
1a940 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
1a950 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
1a960 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
1a970 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
1a980 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
1a990 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
1a9a0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
1a9b0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
1a9c0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
1a9d0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
1a9e0 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
1a9f0 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
1aa00 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
1aa10 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
1aa20 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
1aa30 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
1aa40 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
1aa50 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
1aa60 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
1aa70 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
1aa80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1aa90 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
1aaa0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
1aab0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
1aac0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
1aad0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
1aae0 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
1aaf0 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
1ab00 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
1ab10 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
1ab20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
1ab30 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
1ab40 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1ab50 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
1ab60 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1ab70 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
1ab80 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
1ab90 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
1aba0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
1abb0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
1abc0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
1abd0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
1abe0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
1abf0 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
1ac00 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
1ac10 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
1ac20 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
1ac30 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
1ac40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ac50 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
1ac60 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
1ac70 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
1ac80 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  EPT */.  LogEst 
1ac90 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
1aca0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
1acb0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
1acc0 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46  ws */.  u32 selF
1acd0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
1ace0 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
1acf0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
1ad00 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
1ad10 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1ad20 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
1ad30 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
1ad40 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
1ad50 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1ad60 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
1ad70 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
1ad80 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
1ad90 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
1ada0 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
1adb0 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
1adc0 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
1add0 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
1ade0 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
1adf0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
1ae00 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1ae10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1ae20 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1ae30 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1ae40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1ae50 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
1ae60 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
1ae70 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
1ae80 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
1ae90 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
1aea0 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
1aeb0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
1aec0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1aed0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
1aee0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1aef0 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
1af00 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
1af10 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
1af20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
1af30 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
1af40 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
1af50 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1af60 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
1af70 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
1af80 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
1af90 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
1afa0 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
1afb0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1afc0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
1afd0 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
1afe0 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
1aff0 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
1b000 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
1b010 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1b020 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
1b030 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
1b040 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
1b050 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
1b060 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1b070 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1b080 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1b090 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1b0a0 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1b0b0 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1b0c0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1b0d0 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1b0e0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1b0f0 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1b100 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1b110 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1b120 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1b130 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1b140 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1b150 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1b160 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1b170 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1b180 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1b190 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1b1a0 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1b1b0 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1b1c0 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1b1d0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1b1e0 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1b1f0 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1b200 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1b210 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1b220 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1b230 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1b240 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1b250 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1b260 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1b270 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1b280 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1b290 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1b2a0 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1b2b0 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1b2c0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1b2d0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1b2e0 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1b2f0 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1b300 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1b310 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1b320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1b330 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1b340 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1b350 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1b360 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1b370 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1b380 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1b390 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1b3a0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1b3b0 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1b3c0 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1b3d0 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1b3e0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1b3f0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1b400 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1b410 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1b420 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1b430 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1b440 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1b450 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1b460 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1b470 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1b480 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1b490 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1b4a0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1b4b0 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1b4c0 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1b4d0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1b4e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1b4f0 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1b500 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1b510 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1b520 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1b530 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1b540 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1b550 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1b560 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1b570 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1b580 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1b590 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1b5a0 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1b5b0 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1b5c0 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1b5d0 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1b5e0 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1b5f0 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1b600 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1b610 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1b620 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1b630 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1b640 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1b650 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1b660 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1b670 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1b680 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1b690 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1b6a0 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1b6b0 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  t */.../*.** The
1b6c0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1b6d0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1b6e0 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1b6f0 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1b700 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1b710 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1b720 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1b730 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1b740 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1b750 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1b760 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1b770 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1b780 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1b790 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1b7c0 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1b7d0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1b7e0 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1b7f0 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1b800 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1b810 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1b820 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1b830 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1b840 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1b850 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1b860 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1b870 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1b880 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1b890 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1b8a0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1b8b0 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1b8c0 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1b8d0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1b8e0 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b900 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1b910 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1b920 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1b930 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b940 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1b950 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1b960 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1b970 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1b980 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1b990 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1b9a0 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1b9b0 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1b9c0 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1b9d0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1b9e0 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1b9f0 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1ba00 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1ba10 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1ba20 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1ba40 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1ba50 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1ba60 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1ba70 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1ba80 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1ba90 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1baa0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1bad0 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1bae0 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1baf0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1bb00 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1bb10 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1bb20 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1bb30 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1bb60 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1bb70 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1bb80 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1bb90 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1bba0 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1bbb0 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1bbc0 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1bbd0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1bbe0 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1bbf0 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1bc00 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1bc10 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1bc30 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1bc40 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1bc50 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1bc60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1bc70 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1bc80 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1bc90 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1bca0 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1bcb0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1bcc0 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1bcd0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1bce0 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1bcf0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1bd00 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1bd10 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1bd20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1bd30 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd50 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1bd60 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1bd70 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1bd80 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1bd90 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1bda0 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1bdb0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1bdc0 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1bde0 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1bdf0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1be00 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1be10 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1be20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1be30 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be50 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1be60 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1be70 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1be80 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1be90 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1bea0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1beb0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1bec0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1bed0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1bee0 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1bef0 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1bf00 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1bf10 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1bf20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1bf30 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1bf40 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1bf50 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1bf60 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1bf70 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1bf80 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1bf90 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1bfa0 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1bfb0 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1bfc0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1bfd0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1bfe0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1bff0 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1c000 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1c010 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1c020 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c040 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1c050 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1c060 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1c070 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c080 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1c090 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1c0a0 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1c0b0 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1c0c0 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1c0d0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1c0e0 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1c100 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1c110 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1c120 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1c130 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c140 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1c150 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1c160 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1c170 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1c1a0 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1c1b0 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1c1c0 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1c1d0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1c1e0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1c1f0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1c200 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c220 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1c230 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1c240 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1c250 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1c280 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1c290 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1c2a0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1c2b0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1c2c0 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1c2d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c2e0 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1c2f0 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1c300 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1c310 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1c340 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1c350 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1c360 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1c370 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1c380 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1c390 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1c3a0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1c3b0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1c3c0 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1c3d0 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1c3e0 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1c3f0 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1c400 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1c410 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1c420 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1c430 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1c440 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1c450 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1c460 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1c470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1c480 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1c490 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1c4a0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1c4b0 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1c4c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1c4d0 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1c4e0 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1c4f0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1c500 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1c510 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1c520 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1c530 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1c540 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1c550 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1c560 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1c570 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1c580 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1c590 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1c5a0 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1c5b0 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1c5c0 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1c5d0 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1c5e0 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1c5f0 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1c600 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1c610 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1c620 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1c630 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1c640 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1c650 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1c660 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1c670 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1c680 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1c690 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1c6a0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1c6b0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1c6c0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1c6d0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1c6e0 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1c6f0 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1c700 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1c710 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1c720 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1c730 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1c740 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1c750 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1c760 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1c770 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1c780 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1c790 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1c7a0 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1c7b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1c7c0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1c7d0 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1c7e0 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1c7f0 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1c800 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1c810 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1c820 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1c830 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1c840 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1c850 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1c860 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1c870 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20   char affSdst;  
1c880 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1c890 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1c8a0 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1c8b0 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
1c8c0 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
1c8d0 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
1c8e0 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
1c8f0 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
1c900 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1c910 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1c920 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
1c930 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
1c940 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
1c950 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c960 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
1c970 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c  cated */.  ExprL
1c980 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1c990 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1c9a0 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1c9b0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1c9c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1c9d0 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1c9e0 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1c9f0 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1ca00 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1ca10 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
1ca20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1ca30 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1ca40 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1ca50 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1ca60 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1ca70 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1ca80 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1ca90 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1caa0 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1cab0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1cac0 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1cad0 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1cae0 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1caf0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1cb00 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1cb10 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
1cb20 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1cb30 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1cb40 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1cb50 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1cb60 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1cb70 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1cb80 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1cb90 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1cba0 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1cbb0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1cbc0 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1cbd0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1cbe0 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1cbf0 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1cc00 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1cc10 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1cc20 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1cc30 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1cc40 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1cc50 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1cc60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1cc70 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1cc80 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1cc90 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1cca0 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1ccb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1ccc0 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1ccd0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1cce0 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1ccf0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
1cd00 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
1cd10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
1cd20 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
1cd30 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1cd40 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
1cd50 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
1cd60 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1cd70 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1cd80 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
1cd90 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67  for each.** trig
1cda0 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1cdb0 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1cdc0 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1cdd0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1cde0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1cdf0 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1ce00 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1ce10 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1ce20 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1ce30 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1ce40 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1ce50 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1ce60 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1ce70 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1ce80 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1ce90 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1cea0 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1ceb0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1cec0 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1ced0 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1cee0 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1cef0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1cf00 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1cf10 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1cf20 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1cf30 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1cf40 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1cf50 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1cf60 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1cf70 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1cf80 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1cf90 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1cfa0 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1cfb0 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1cfc0 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1cfd0 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1cfe0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1cff0 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1d000 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1d010 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1d020 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1d030 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1d040 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61  of INSERT.** sta
1d050 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1d060 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1d070 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1d080 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1d090 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1d0a0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1d0b0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1d0c0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1d0d0 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1d0e0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1d0f0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1d100 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1d110 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1d120 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1d130 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1d140 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1d150 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1d160 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1d170 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1d180 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1d190 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1d1a0 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1d1b0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1d1c0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1d1d0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1d1e0 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1d1f0 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1d200 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1d210 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1d220 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1d230 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1d240 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1d250 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1d260 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1d270 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1d280 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1d290 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1d2a0 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1d2b0 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1d2c0 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1d2d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1d2e0 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1d2f0 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1d300 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1d310 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1d320 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1d330 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1d340 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1d350 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1d360 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1d370 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1d380 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1d390 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1d3a0 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1d3b0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1d3c0 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1d3d0 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1d3e0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1d3f0 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1d400 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1d410 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1d420 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1d430 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1d440 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1d450 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1d460 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1d470 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1d480 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1d490 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1d4a0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1d4b0 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1d4c0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1d4d0 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1d4e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1d4f0 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1d500 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1d510 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1d520 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1d530 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1d540 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1d550 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1d560 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1d570 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1d580 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1d590 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1d5a0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1d5b0 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1d5c0 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1d5d0 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1d5e0 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1d5f0 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1d600 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1d610 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1d620 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1d630 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1d640 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1d650 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1d660 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1d670 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1d680 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1d690 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1d6a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1d6b0 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1d6c0 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1d6d0 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1d6e0 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1d6f0 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
1d700 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
1d710 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
1d720 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
1d730 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
1d740 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
1d750 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
1d760 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
1d770 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
1d780 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
1d790 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
1d7a0 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
1d7b0 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
1d7c0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
1d7d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
1d7e0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
1d7f0 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
1d800 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1d810 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
1d820 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
1d830 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
1d840 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
1d850 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
1d860 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
1d870 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
1d880 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
1d890 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1d8a0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
1d8b0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
1d8c0 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
1d8d0 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
1d8e0 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
1d8f0 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
1d900 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
1d910 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
1d920 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
1d930 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
1d940 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
1d950 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
1d960 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
1d970 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d980 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
1d990 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
1d9a0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1d9b0 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
1d9c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d9d0 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
1d9e0 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
1d9f0 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  pReg[] */.  u8 i
1da00 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
1da10 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1da20 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79  ement may modify
1da30 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
1da40 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
1da50 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
1da60 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1da70 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
1da80 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
1da90 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d  n */.  u8 hasCom
1daa0 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e  pound;      /* N
1dab0 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f  eed to invoke co
1dac0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1dad0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1dae0 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46  */.  u8 okConstF
1daf0 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20  actor;    /* OK 
1db00 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f  to factor out co
1db10 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20  nstants */.  u8 
1db20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65  disableLookaside
1db30 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74  ; /* Number of t
1db40 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68  imes lookaside h
1db50 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
1db60 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63   */.  u8 nColCac
1db70 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  he;        /* Nu
1db80 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1db90 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a  in aColCache[] *
1dba0 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1dbb0 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1dbc0 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1dbd0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1dbe0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1dbf0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1dc00 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1dc10 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1dc20 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1dc30 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1dc40 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1dc50 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1dc60 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1dc70 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1dc80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1dc90 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1dca0 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1dcb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1dcc0 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1dcd0 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1dce0 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1dcf0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1dd00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1dd10 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1dd20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1dd30 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1dd40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1dd50 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1dd60 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1dd70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1dd80 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1dd90 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1dda0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1ddb0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1ddc0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1ddd0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1dde0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1ddf0 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
1de00 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
1de10 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
1de20 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1de30 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69  p[] */.  int iFi
1de40 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a  xedOp;        /*
1de50 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20   Never back out 
1de60 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70  opcodes iFixedOp
1de70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f  -1 or earlier */
1de80 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
1de90 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1dea0 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
1deb0 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
1dec0 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
1ded0 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20  nt iSelfTab;    
1dee0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20      /* Table of 
1def0 61 6e 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65  an index whose e
1df00 78 70 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  xprs are being c
1df10 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43  oded */.  int iC
1df20 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1df30 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1df40 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1df50 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1df60 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1df70 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1df80 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1df90 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1dfa0 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1dfb0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1dfc0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1dfd0 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1dfe0 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1dff0 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1e000 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1e010 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1e020 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1e030 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1e040 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1e050 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1e060 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1e070 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1e080 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1e090 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1e0a0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1e0b0 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1e0c0 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1e0d0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1e0e0 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1e0f0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1e100 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1e110 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1e120 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1e130 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1e140 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1e150 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1e160 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1e170 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1e180 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1e190 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1e1a0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1e1b0 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1e1c0 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1e1d0 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1e1e0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1e1f0 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1e200 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e    ExprList *pCon
1e210 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61  stExpr;/* Consta
1e220 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  nt expressions *
1e230 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
1e240 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
1e250 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
1e260 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
1e270 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  ng parsed */.  y
1e280 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
1e290 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
1e2a0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
1e2b0 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
1e2c0 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
1e2d0 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
1e2e0 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
1e2f0 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
1e300 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
1e310 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
1e320 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
1e330 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
1e340 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
1e350 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
1e360 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1e370 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1e380 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1e390 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1e3a0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1e3b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1e3c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1e3d0 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1e3e0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1e3f0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1e400 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1e410 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1e420 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1e430 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20  -program */.#if 
1e440 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1e450 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63  LED.  int nSelec
1e460 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
1e470 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
1e480 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a  tatements seen *
1e490 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49  /.  int nSelectI
1e4a0 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20  ndent;   /* How 
1e4b0 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45  far to indent SE
1e4c0 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70  LECTTRACE() outp
1e4d0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ut */.#endif.#if
1e4e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1e4f0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1e500 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1e510 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e520 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1e530 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1e540 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1e550 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1e560 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1e570 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1e580 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1e590 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1e5a0 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1e5b0 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1e5c0 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1e5d0 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
1e5e0 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
1e5f0 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
1e600 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
1e610 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
1e620 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
1e630 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
1e640 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
1e650 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
1e660 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
1e670 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
1e680 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
1e690 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
1e6a0 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
1e6b0 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
1e6c0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e  eTable opcode on
1e6d0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1e6e0 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
1e6f0 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
1e700 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
1e710 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
1e720 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
1e730 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
1e740 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1e750 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
1e760 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1e770 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
1e780 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
1e790 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
1e7a0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
1e7b0 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
1e7c0 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
1e7d0 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
1e7e0 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
1e7f0 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
1e800 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1e810 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
1e820 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
1e830 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1e840 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
1e850 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
1e860 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
1e870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e8a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e8b0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1e8c0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1e8d0 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1e8e0 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1e8f0 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1e900 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1e910 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1e920 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1e930 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1e940 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1e950 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1e960 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f  f(Parse,nVar) so
1e970 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20   the nVar field 
1e980 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73  must be the firs
1e990 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20  t field.  ** in 
1e9a0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
1e9b0 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
1e9c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e9d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e9e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e9f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ea00 2f 0a 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  /..  ynVar nVar;
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
1ea30 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
1ea40 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
1ea50 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
1ea80 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
1ea90 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
1eaa0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1eab0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1eac0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1ead0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1eae0 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb00 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
1eb10 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
1eb20 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
1eb30 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1eb40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1eb50 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
1eb60 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
1eb70 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
1eb80 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1eb90 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
1eba0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
1ebb0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ebc0 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
1ebd0 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
1ebe0 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61  ndif.  int nAlia
1ebf0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1ec00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
1ec10 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74  iased result set
1ec20 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e   columns */.  in
1ec30 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
1ec40 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
1ec50 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
1ec60 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
1ec70 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
1ec80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
1ec90 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65  XPLAIN.  int iSe
1eca0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20  lectId;         
1ecb0 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72     /* ID of curr
1ecc0 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45  ent select for E
1ecd0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1ece0 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65  .  int iNextSele
1ecf0 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ctId;        /* 
1ed00 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  Next available s
1ed10 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50  elect ID for EXP
1ed20 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  LAIN output */.#
1ed30 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61  endif.  char **a
1ed40 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1ed50 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f    /* Pointers to
1ed60 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65   names of parame
1ed70 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  ters */.  Vdbe *
1ed80 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
1ed90 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
1eda0 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
1edb0 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
1edc0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1edd0 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f  *zTail;        /
1ede0 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
1edf0 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
1ee00 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
1ee10 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
1ee20 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ble;         /* 
1ee30 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f  A table being co
1ee40 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45  nstructed by CRE
1ee50 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54  ATE TABLE */.  T
1ee60 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
1ee70 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
1ee80 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
1ee90 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
1eea0 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
1eeb0 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
1eec0 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
1eed0 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
1eee0 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
1eef0 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  ks */.  Token sN
1ef00 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
1ef10 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
1ef20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
1ef30 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
1ef40 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  /.  Token sLastT
1ef50 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1ef60 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
1ef70 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65  parsed */.#ifnde
1ef80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1ef90 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
1efa0 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
1efb0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
1efc0 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
1efd0 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
1efe0 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
1eff0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
1f000 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
1f010 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
1f020 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
1f030 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
1f040 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
1f050 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
1f060 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
1f070 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
1f080 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1f090 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
1f0a0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
1f0b0 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
1f0c0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1f0d0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1f0e0 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
1f0f0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1f100 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1f110 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
1f120 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
1f130 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
1f140 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
1f150 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  */.};../*.** Ret
1f160 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
1f170 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
1f180 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1f190 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
1f1a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1f1b0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1f1c0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1f1d0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
1f1e0 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
1f1f0 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
1f200 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
1f210 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1f220 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1f230 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1f240 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
1f250 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
1f260 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
1f270 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
1f280 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
1f290 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
1f2a0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
1f2b0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
1f2c0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
1f2d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1f2e0 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
1f2f0 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
1f300 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
1f310 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1f320 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1f330 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
1f340 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
1f350 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
1f360 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
1f370 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
1f380 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
1f390 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1f3a0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1f3b0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
1f3c0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
1f3d0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
1f3e0 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
1f3f0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
1f400 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
1f410 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
1f420 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1f430 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
1f440 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
1f450 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
1f460 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
1f470 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
1f480 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
1f490 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
1f4a0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
1f4b0 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
1f4c0 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
1f4d0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
1f4e0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
1f4f0 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
1f500 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1f510 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1f520 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
1f530 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
1f540 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f570 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
1f580 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
1f590 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
1f5a0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
1f5b0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
1f5c0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
1f5d0 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
1f5e0 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
1f5f0 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
1f600 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1f610 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
1f620 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
1f630 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
1f640 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
1f650 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
1f660 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
1f670 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
1f680 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
1f690 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
1f6a0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
1f6b0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
1f6c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1f6d0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
1f6e0 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
1f6f0 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
1f700 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
1f710 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1f720 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
1f730 54 45 5f 48 4f 4f 4b 0a 23 64 65 66 69 6e 65 20  TE_HOOK.#define 
1f740 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20  OPFLAG_ISNOOP   
1f750 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
1f760 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70  OP_Delete does p
1f770 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f  re-update-hook o
1f780 6e 6c 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 64  nly */.#endif.#d
1f790 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
1f7a0 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
1f7b0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1f7c0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
1f7d0 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
1f7e0 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
1f7f0 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
1f800 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
1f810 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
1f820 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1f830 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
1f840 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1f850 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
1f860 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
1f870 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1f880 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
1f890 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
1f8a0 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
1f8b0 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
1f8c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1f8d0 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
1f8e0 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
1f8f0 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52  n should use BTR
1f900 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a  EE_FORDELETE */.
1f910 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1f920 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
1f930 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
1f940 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
1f950 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
1f960 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1f970 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
1f980 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
1f990 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
1f9a0 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  utation */.#defi
1f9b0 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ne OPFLAG_SAVEPO
1f9c0 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20  SITION  0x02    
1f9d0 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65  /* OP_Delete: ke
1f9e0 65 70 20 63 75 72 73 6f 72 20 70 6f 73 69 74 69  ep cursor positi
1f9f0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
1fa00 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
1fa10 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
1fa20 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
1fa30 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
1fa40 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1fa50 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1fa60 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1fa70 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1fa80 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1fa90 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1faa0 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  r.. *. * Pointer
1fab0 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1fac0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1fad0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1fae0 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1faf0 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1fb00 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1fb10 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1fb20 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1fb30 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61  s the. *    data
1fb40 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
1fb50 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
1fb60 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
1fb70 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
1fb80 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
1fb90 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
1fba0 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
1fbb0 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
1fbc0 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
1fbd0 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
1fbe0 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
1fbf0 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
1fc00 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1fc10 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
1fc20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
1fc30 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
1fc40 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
1fc50 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
1fc60 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
1fc70 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
1fc80 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1fc90 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
1fca0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1fcb0 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
1fcc0 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
1fcd0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
1fce0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1fcf0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
1fd00 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
1fd10 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
1fd20 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1fd30 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
1fd40 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
1fd70 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1fd80 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
1fd90 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
1fda0 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
1fdb0 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdd0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1fde0 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1fdf0 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
1fe00 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fe20 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
1fe30 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
1fe40 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
1fe50 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
1fe60 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
1fe70 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
1fe80 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
1fe90 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
1fea0 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
1feb0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
1fec0 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
1fed0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
1fee0 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
1ff10 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
1ff20 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1ff30 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
1ff40 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1ff50 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
1ff60 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
1ff70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
1ff80 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1ff90 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
1ffa0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1ffb0 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
1ffc0 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
1ffd0 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1fff0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
20000 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
20010 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
20020 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
20030 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
20040 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
20050 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
20060 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
20070 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
20080 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
20090 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a  etermine which..
200a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
200b0 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
200c0 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
200d0 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
200e0 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
200f0 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
20100 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
20110 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
20120 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
20130 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
20140 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
20150 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
20160 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
20170 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
20180 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
20190 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
201a0 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
201b0 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
201c0 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
201d0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
201e0 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
201f0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
20200 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
20210 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
20220 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
20230 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
20240 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
20250 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
20260 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
20270 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74   the. * associat
20280 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
20290 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
202a0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
202b0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
202c0 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
202d0 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
202e0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
202f0 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
20300 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
20310 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
20320 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
20330 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
20340 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
20350 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
20360 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
20370 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
20380 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a  rmined by the. *
20390 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
203a0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
203b0 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
203c0 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
203d0 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
203e0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
203f0 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
20400 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
20410 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
20420 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
20430 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
20450 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
20460 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
20470 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
20480 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a  rwise NULL.. * z
20490 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
204a0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
204b0 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
204c0 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
204d0 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
204e0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
204f0 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
20500 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
20510 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
20520 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
20530 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
20540 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
20550 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
20560 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
20570 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
20580 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
20590 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20  ) VALUES .... * 
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
205b0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
205c0 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
205d0 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
205e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
205f0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
20600 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
20610 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  ELETE). * zTarge
20620 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
20630 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
20640 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
20650 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
20660 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
20670 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
20680 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
20690 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
206a0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
206b0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
206c0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
206d0 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67  UPDATE). * zTarg
206e0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
206f0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
20700 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a  le to update.. *
20710 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
20720 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
20730 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
20740 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
20750 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
20760 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
20770 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
20780 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
20790 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
207a0 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
207b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
207c0 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
207d0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
207e0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
207f0 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
20800 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
20810 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
20820 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a     argument.. *.
20830 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
20840 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
20850 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20860 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
20870 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
20880 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
20890 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
208a0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
208b0 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
208c0 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
208d0 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
208e0 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
208f0 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
20900 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
20910 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
20920 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
20930 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  ement or RHS of 
20940 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45  INSERT INTO SELE
20950 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72  CT ... */.  char
20960 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20   *zTarget;      
20970 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
20980 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
20990 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
209a0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
209b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
209c0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
209d0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
209e0 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
209f0 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
20a00 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
20a10 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64   UPDATE. */.  Id
20a20 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
20a30 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
20a40 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
20a50 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
20a60 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
20a70 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
20a80 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
20a90 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
20aa0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
20ab0 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
20ac0 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
20ad0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
20ae0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
20af0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
20b00 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
20b10 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
20b20 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
20b30 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
20b40 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
20b50 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
20b60 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
20b70 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  cit..*/.typedef 
20b80 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
20b90 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
20ba0 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
20bb0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
20bc0 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
20bd0 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
20be0 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
20bf0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
20c00 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
20c10 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
20c20 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
20c30 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
20c40 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
20c50 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
20c60 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
20c70 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
20c80 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
20c90 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
20ca0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
20cb0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
20cc0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
20cd0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
20ce0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
20cf0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
20d00 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
20d10 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
20d20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
20d30 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
20d40 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
20d50 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
20d60 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
20d70 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
20d80 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
20d90 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
20da0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
20db0 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
20dc0 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
20dd0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
20de0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
20df0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
20e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
20e10 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
20e20 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
20e30 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
20e40 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
20e50 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
20e60 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
20e70 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
20e80 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
20e90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
20ea0 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
20eb0 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
20ec0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
20ed0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
20ee0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
20ef0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
20f00 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
20f10 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
20f20 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
20f30 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
20f40 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
20f50 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
20f60 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
20f70 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
20f80 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
20f90 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
20fa0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
20fb0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
20fc0 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
20fd0 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
20fe0 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
20ff0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
21000 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
21010 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
21020 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
21030 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21040 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
21050 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
21060 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
21070 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
21080 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21090 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
210a0 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
210b0 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
210c0 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
210d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
210e0 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
210f0 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
21100 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
21110 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
21120 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
21130 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
21140 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
21150 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
21160 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
21170 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
21180 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
21190 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
211a0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
211b0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
211c0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
211d0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
211e0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
211f0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
21200 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
21210 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
21220 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
21230 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
21240 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
21250 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
21260 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
21270 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
21280 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
21290 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
212a0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
212b0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
212c0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
212d0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
212e0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
212f0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
21300 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
21310 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
21320 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
21330 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
21340 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
21350 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
21360 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
21370 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
21380 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
21390 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
213a0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
213b0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
213c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
213d0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
213e0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
213f0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
21420 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
21430 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
21440 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
21450 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21460 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
21470 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
21480 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
214a0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
214b0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
214c0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
214d0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
214f0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
21500 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
21510 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
21520 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
21530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21540 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
21550 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
21560 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
21570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
21580 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
21590 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
215a0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
215b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
215c0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
215d0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
215e0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
215f0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
21600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
21610 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
21620 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
21630 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
21640 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
21650 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
21660 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
21670 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
21680 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
21690 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
216a0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
216b0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
216c0 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
216d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
216e0 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
216f0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
21700 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
21710 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
21720 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
21730 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
21740 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
21750 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
21760 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21780 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
21790 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
217a0 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
217b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
217c0 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
217d0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
217e0 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
217f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
21800 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
21810 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
21820 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
21830 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
21840 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
21850 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
21860 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
21870 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
21880 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
21890 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
218a0 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
218b0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
218c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
218d0 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
218e0 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21900 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
21910 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
21920 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
21930 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
21940 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21950 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
21960 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
21970 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21990 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
219a0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
219b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
219c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
219d0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
219e0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
219f0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
21a20 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
21a30 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
21a40 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
21a50 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
21a60 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
21a70 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
21a80 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
21a90 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
21aa0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
21ab0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
21ac0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
21ad0 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21af0 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
21b00 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
21b10 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
21b20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
21b30 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
21b40 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
21b50 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
21b60 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
21b70 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
21b80 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ba0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
21bb0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
21bc0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
21bd0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bf0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
21c00 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
21c10 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
21c20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
21c30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21c40 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
21c50 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
21c60 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
21c70 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c90 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
21ca0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
21cb0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
21cc0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
21cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
21ce0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
21cf0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
21d00 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
21d10 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
21d20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21d30 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
21d40 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
21d50 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
21d60 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
21d70 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
21d80 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
21d90 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
21da0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
21db0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
21dc0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
21dd0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
21de0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
21e10 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
21e20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
21e30 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
21e40 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
21e50 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
21e60 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
21e70 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
21e80 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
21e90 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
21ea0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
21eb0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
21ec0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
21ed0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
21ee0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
21ef0 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
21f00 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
21f10 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
21f20 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
21f30 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
21f40 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
21f50 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c  (void*,int iSrcL
21f60 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
21f70 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
21f80 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
21f90 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fc0 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
21fd0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
21fe0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21ff0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69  BUILTIN_TEST.  i
22000 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
22010 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
22020 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
22030 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
22040 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
22050 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
22060 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
22070 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
22080 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
22090 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
220a0 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
220b0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
220c0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
220d0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
220e0 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
220f0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
22100 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
22110 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
22120 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
22130 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
22140 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
22150 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
22160 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
22170 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
22180 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
22190 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
221a0 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
221b0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
221c0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
221d0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
221e0 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
221f0 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
22200 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
22210 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
22220 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
22230 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
22240 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
22250 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
22260 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
22270 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
22280 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
22290 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
222a0 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
222b0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
222c0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
222d0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
222e0 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
222f0 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
22300 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
22310 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
22320 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
22330 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
22340 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
22350 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
22360 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22380 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
22390 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
223a0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
223b0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
223c0 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
223d0 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
223e0 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
223f0 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
22400 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
22410 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
22420 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
22430 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
22440 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
22450 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
22460 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
22470 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
22480 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
224b0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
224c0 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
224f0 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
22500 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
22510 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
22540 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
22550 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
22560 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22580 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
22590 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b  xt */.    int n;
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225c0 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
225d0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
225e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22600 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
22610 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
22620 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
22650 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
22660 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
22670 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
22680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
22690 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
226a0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73  erences */.    s
226b0 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a  truct CCurHint *
226c0 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20  pCCurHint;      
226d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
226e0 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
226f0 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
22700 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
22730 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
22740 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
22750 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
22760 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
22770 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
22780 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
22790 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
227a0 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
227b0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
227c0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
227d0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
227e0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
227f0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
22800 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
22810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22820 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
22830 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
22840 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22850 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
22860 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  , Expr*);../*.**
22870 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
22880 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
22890 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
228a0 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
228b0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
228c0 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
228d0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
228e0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
228f0 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
22900 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
22910 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
22920 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
22930 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
22940 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
22950 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
22960 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
22970 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
22980 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
22990 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
229a0 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
229b0 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
229c0 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
229d0 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
229e0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
229f0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
22a00 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
22a10 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
22a20 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
22a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22a40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
22a50 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
22a60 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
22a70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
22a80 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
22a90 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
22aa0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
22ab0 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
22ae0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
22af0 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
22b00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22b20 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
22b30 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
22b40 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
22b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
22b60 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
22b70 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
22b80 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
22b90 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
22ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
22bb0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
22bc0 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
22bd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
22be0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
22bf0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
22c00 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
22c10 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
22c20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
22c30 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
22c40 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
22c50 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
22c60 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
22c70 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
22c80 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
22c90 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
22ca0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
22cb0 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
22cc0 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
22cd0 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
22ce0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22d00 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
22d10 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
22d20 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
22d30 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
22d40 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
22d50 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
22d60 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
22d70 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
22d80 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
22d90 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
22da0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
22db0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
22dc0 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
22dd0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
22de0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
22df0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
22e00 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
22e10 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
22e20 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
22e30 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
22e60 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
22e90 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
22ea0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
22eb0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
22ec0 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
22f00 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
22f10 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
22f20 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
22f30 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
22f40 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
22f50 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
22f60 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
22f70 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
22f80 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
22f90 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
22fa0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
22fb0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
22fc0 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
22fd0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
22fe0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
22ff0 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
23000 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
23010 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
23020 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
23030 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
23040 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
23050 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
23060 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
23070 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
23080 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
23090 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
230a0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
230b0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
230c0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
230d0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
230e0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
230f0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
23100 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
23110 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
23120 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
23130 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
23140 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
23150 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
23160 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
23170 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
23180 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
23190 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64  mError(int);.# d
231a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
231b0 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e  EM_BKPT sqlite3N
231c0 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
231d0 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
231e0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
231f0 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72  BKPT sqlite3Ioer
23200 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  rnomemError(__LI
23210 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  NE__).#else.# de
23220 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
23230 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f  M_BKPT SQLITE_NO
23240 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
23250 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
23260 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52  BKPT SQLITE_IOER
23270 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a  R_NOMEM.#endif..
23280 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46  /*.** FTS3 and F
23290 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65  TS4 both require
232a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
232b0 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65  upport.*/.#if de
232c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
232d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
232e0 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
232f0 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64  NABLE_FTS3.# und
23300 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
23310 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS4.#endif../*
23320 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
23330 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
23340 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
23350 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
23360 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
23370 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
23380 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
23390 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
233a0 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
233b0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
233c0 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
233d0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
233e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
233f0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
23400 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
23410 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
23420 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
23430 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
23440 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
23450 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
23460 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
23470 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
23480 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
23490 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
234a0 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
234b0 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
234c0 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
234d0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
234e0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
234f0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
23500 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
23510 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
23520 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
23530 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
23540 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
23550 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
23560 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
23570 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
23580 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
23590 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
235a0 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
235b0 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
235c0 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
235d0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
235e0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
235f0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
23600 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
23610 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
23620 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
23630 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
23640 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
23650 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
23660 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
23670 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
23680 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
23690 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
236a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
236b0 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
236c0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
236d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
236e0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
236f0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
23700 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
23710 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
23720 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
23730 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
23740 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
23750 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
23760 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
23770 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
23780 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
23790 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
237a0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
237b0 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
237c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
237d0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
237e0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
237f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
23800 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
23810 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
23820 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
23830 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
23840 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65   char)(x)]).# de
23850 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
23860 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ote(x)   (sqlite
23870 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
23880 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
23890 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  80).#else.# defi
238a0 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
238b0 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
238c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
238d0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
238e0 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
238f0 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
23900 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
23910 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
23920 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
23930 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
23940 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
23950 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
23960 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
23970 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
23980 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
23990 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
239a0 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
239b0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
239c0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
239d0 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
239e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
239f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23a00 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
23a10 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
23a20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
23a30 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
23a40 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27  e(x)   ((x)=='"'
23a50 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29  ||(x)=='\''||(x)
23a60 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29  =='['||(x)=='`')
23a70 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
23a80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
23a90 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
23aa0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43  int sqlite3IsIdC
23ab0 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a  har(u8);.#endif.
23ac0 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
23ad0 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
23ae0 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pes.*/.int sqlit
23af0 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
23b00 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
23b10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
23b20 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
23b30 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
23b40 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f  te3ColumnType(Co
23b50 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64  lumn*,char*);.#d
23b60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
23b70 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
23b80 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
23b90 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
23ba0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
23bb0 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
23bc0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
23bd0 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64  alloc(u64);.void
23be0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
23bf0 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  ero(u64);.void *
23c00 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
23c10 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  ero(sqlite3*, u6
23c20 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
23c30 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
23c40 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
23c50 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
23c60 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a  ocRawNN(sqlite3*
23c70 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71  , u64);.char *sq
23c80 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
23c90 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23ca0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
23cb0 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
23cc0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23cd0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
23ce0 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
23cf0 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  d*, u64);.void *
23d00 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
23d10 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
23d20 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a  , void *, u64);.
23d30 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
23d40 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
23d50 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a  , void *, u64);.
23d60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
23d70 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
23d80 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
23d90 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
23da0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
23db0 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
23dc0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
23dd0 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
23de0 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
23df0 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
23e00 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
23e10 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
23e20 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
23e30 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
23e40 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
23e50 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
23e60 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65  lt(void);.#ifnde
23e70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
23e80 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20  ILTIN_TEST.void 
23e90 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
23ea0 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
23eb0 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
23ec0 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66  )(void));.#endif
23ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
23ee0 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
23ef0 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
23f00 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
23f10 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
23f20 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
23f30 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
23f40 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
23f50 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
23f60 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
23f70 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
23f80 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
23f90 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
23fa0 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
23fb0 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
23fc0 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
23fd0 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
23fe0 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
23ff0 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
24000 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
24010 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
24020 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
24030 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
24040 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
24050 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24060 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
24070 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
24080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
24090 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
240a0 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
240b0 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
240c0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
240d0 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65  kFree(D,P).#else
240e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
240f0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
24100 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
24110 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
24120 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
24130 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
24140 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
24150 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
24160 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
24170 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
24180 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
24190 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
241a0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
241b0 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
241c0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
241d0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
241e0 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
241f0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
24200 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
24210 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
24220 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
24230 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
24240 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
24250 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
24260 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
24270 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
24280 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
24290 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
242a0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
242b0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
242c0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
242d0 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
242e0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
242f0 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
24300 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
24310 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
24320 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
24330 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
24340 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
24350 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
24360 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
24370 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
24380 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
24390 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
243a0 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
243b0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
243c0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
243d0 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
243e0 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
243f0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
24400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
24410 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
24420 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
24430 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
24440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24450 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
24460 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63  nt, int);../* Ac
24470 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20  cess to mutexes 
24480 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
24490 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69  status() */.sqli
244a0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
244b0 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76  e3Pcache1Mutex(v
244c0 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75  oid);.sqlite3_mu
244d0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  tex *sqlite3Mall
244e0 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a  ocMutex(void);..
244f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24500 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
24510 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
24520 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
24530 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24540 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
24550 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
24560 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
24570 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
24580 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
24590 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
245a0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
245b0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
245c0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
245d0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
245e0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
245f0 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
24600 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
24610 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
24620 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
24630 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
24640 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24660 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
24670 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
24680 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
24690 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
246a0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
246b0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64  lues */.};..void
246c0 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
246d0 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
246e0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
246f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
24700 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
24710 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
24720 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
24730 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
24740 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24750 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
24760 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
24770 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
24780 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20  , va_list);.#if 
24790 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
247a0 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
247b0 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
247c0 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71  TRACE).  void sq
247d0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
247e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
247f0 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
24800 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
24810 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
24820 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
24830 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
24840 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
24850 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
24860 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
24870 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65  reeViewExpr(Tree
24880 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
24890 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  r*, u8);.  void 
248a0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
248b0 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
248c0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
248d0 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
248e0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
248f0 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
24900 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
24910 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
24920 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24930 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
24940 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
24950 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  th*, u8);.#endif
24960 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
24970 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
24980 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
24990 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
249a0 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
249b0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
249c0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
249d0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
249e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
249f0 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
24a00 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  n*,char*);.int s
24a10 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
24a20 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
24a30 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
24a40 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
24a50 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
24a60 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
24a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
24a80 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
24a90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
24aa0 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
24ab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24ac0 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
24ad0 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
24ae0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
24af0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
24b00 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
24b10 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
24b20 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
24b30 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
24b40 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
24b50 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
24b60 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
24b70 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
24b80 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
24b90 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20  t);.#endif.Expr 
24ba0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
24bb0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
24bc0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
24bd0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24be0 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
24bf0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
24c00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
24c10 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
24c20 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
24c30 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
24c40 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
24c50 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
24c60 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
24c70 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
24c80 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65  ite3PExprAddSele
24c90 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
24ca0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72  , Select*);.Expr
24cb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
24cc0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
24cd0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
24ce0 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
24cf0 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
24d00 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
24d10 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
24d20 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
24d30 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
24d40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
24d50 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
24d60 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
24d70 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
24d80 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
24d90 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
24da0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24db0 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
24dc0 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
24dd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24de0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
24df0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
24e00 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
24e10 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
24e20 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
24e30 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
24e40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24e50 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
24e60 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
24e70 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
24e80 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
24e90 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
24ea0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
24eb0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
24ec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
24ed0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
24ee0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
24ef0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
24f00 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
24f10 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
24f20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
24f30 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
24f40 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
24f50 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
24f60 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
24f70 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
24f80 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
24f90 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
24fa0 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
24fb0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
24fc0 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
24fd0 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
24fe0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24ff0 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
25000 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
25010 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
25020 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
25030 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
25040 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
25050 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25060 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54  SelectAddColumnT
25070 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28  ypeAndCollation(
25080 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65  Parse*,Table*,Se
25090 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
250a0 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
250b0 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
250c0 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
250d0 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
250e0 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
250f0 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
25100 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
25110 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
25120 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
25130 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
25140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25150 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
25160 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
25170 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
25180 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
25190 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
251a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
251b0 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
251c0 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
251d0 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
251e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
251f0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
25200 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
25210 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
25220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
25230 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
25240 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
25250 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
25260 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
25270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25280 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
25290 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
252a0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
252b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
252c0 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
252d0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
252e0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
252f0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
25300 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
25310 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
25320 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
25330 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
25340 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
25350 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
25360 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
25370 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
25380 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
25390 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
253a0 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253c0 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
253d0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
253e0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
253f0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
25400 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
25410 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
25420 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
25430 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
25440 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
25450 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25460 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
25470 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
25480 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
25490 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
254a0 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
254b0 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
254c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
254d0 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
254e0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
254f0 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
25500 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
25510 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
25520 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
25530 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
25540 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
25550 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
25560 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
25570 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
25580 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
25590 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
255a0 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
255b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
255c0 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73  ILTIN_TEST.int s
255d0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
255e0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
255f0 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
25600 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
25610 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
25620 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
25630 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25640 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
25650 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
25660 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
25670 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
25680 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
25690 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
256a0 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
256b0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
256c0 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
256d0 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
256e0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
256f0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
25700 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  n*,Token*,ExprLi
25710 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  st*,Select*,int,
25720 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
25730 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
25740 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
25750 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
25760 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
25770 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
25780 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
25790 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
257a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
257b0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
257c0 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
257d0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
257e0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
257f0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
25800 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
25810 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
25820 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
25830 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
25840 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25850 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
25860 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
25870 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
25880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25890 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
258a0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
258b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
258c0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
258d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
258e0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
258f0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
25900 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
25910 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
25920 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
25930 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25940 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
25950 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
25960 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
25970 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
25980 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
25990 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
259a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
259b0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
259c0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
259d0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
259e0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
259f0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
25a00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
25a10 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
25a20 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
25a30 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
25a40 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
25a50 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
25a60 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
25a70 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
25a80 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
25a90 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
25aa0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
25ab0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
25ac0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
25ad0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
25ae0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
25af0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
25b00 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
25b10 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
25b20 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
25b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
25b60 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
25b70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25b80 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
25b90 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
25ba0 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
25bb0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
25bc0 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
25bd0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
25be0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
25bf0 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
25c00 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
25c10 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
25c20 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25c30 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
25c40 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
25c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
25c60 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
25c70 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
25c80 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
25c90 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
25ca0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
25cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
25cc0 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
25cd0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
25ce0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
25cf0 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
25d00 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
25d10 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
25d20 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
25d30 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
25d40 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
25d50 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
25d60 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
25d90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25da0 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
25db0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
25dc0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25dd0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
25de0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
25df0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
25e00 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
25e10 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
25e20 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
25e30 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
25e60 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70  t*,u32,Expr*,Exp
25e70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25e80 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
25e90 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
25ea0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
25eb0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
25ec0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
25ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
25ee0 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
25ef0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
25f00 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
25f10 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
25f20 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
25f30 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
25f40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25f50 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
25f60 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
25f70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25f80 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
25f90 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
25fa0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
25fb0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
25fc0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
25fd0 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
25fe0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25ff0 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
26000 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
26010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
26020 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
26030 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
26040 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
26050 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
26060 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
26070 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
26080 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
26090 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
260a0 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
260b0 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
260c0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57  .LogEst sqlite3W
260d0 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
260e0 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
260f0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
26100 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
26110 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
26120 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
26130 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
26140 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
26150 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
26160 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
26170 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
26180 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
26190 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
261a0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
261b0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
261c0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
261d0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
261e0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
261f0 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
26200 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
26210 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
26220 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
26230 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
26240 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
26250 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
26260 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
26270 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
26280 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
26290 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
262a0 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
262b0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
262c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
262d0 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
262e0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
262f0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
26300 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26310 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
26320 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
26330 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
26340 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
26350 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
26360 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
26370 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
26380 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26390 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
263a0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
263b0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
263c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
263d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
263e0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
263f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
26400 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
26410 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
26420 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
26430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26440 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
26450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26460 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
26470 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
26480 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
26490 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
264a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
264b0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
264c0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
264d0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
264e0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
264f0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
26500 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26510 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
26520 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
26530 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
26540 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
26550 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26560 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
26570 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
26580 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
26590 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
265a0 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
265b0 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
265c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
265d0 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
265e0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
265f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
26600 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
26610 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
26620 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
26630 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
26640 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
26650 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
26660 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
26670 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
26680 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  t, int, u8);.#de
26690 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
266a0 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
266b0 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
266c0 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
266d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
266e0 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
266f0 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
26700 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
26710 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
26720 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30  _ECEL_REF      0
26730 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72  x04  /* Use Expr
26740 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
26750 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
26760 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
26770 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
26780 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26790 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
267a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
267b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
267c0 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
267d0 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
267e0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
267f0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
26800 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
26810 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
26820 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
26830 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
26840 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
26850 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
26860 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
26870 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
26880 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
26890 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
268a0 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
268b0 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
268c0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
268d0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
268e0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
268f0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
26900 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
26910 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
26920 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
26930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
26940 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
26950 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
26960 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
26970 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
26980 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
26990 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
269a0 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
269b0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
269c0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
269d0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
269e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
269f0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
26a00 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
26a10 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
26a20 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
26a30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
26a40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26a50 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
26a60 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
26a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26a80 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
26a90 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
26aa0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
26ab0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
26ac0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
26ad0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
26ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
26af0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
26b00 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
26b10 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
26b20 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
26b30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26b40 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
26b50 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  T.void sqlite3Pr
26b60 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
26b70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26b80 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
26b90 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
26ba0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
26bb0 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
26bc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26bd0 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
26be0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
26bf0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
26c00 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
26c10 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
26c20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
26c30 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
26c40 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
26c50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26c60 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
26c70 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
26c80 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
26c90 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
26ca0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26cb0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
26cc0 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
26cd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
26ce0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
26cf0 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
26d00 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
26d10 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
26d20 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
26d30 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
26d40 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
26d50 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
26d60 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
26d70 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
26d80 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
26d90 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c  rFunction(Expr*,
26da0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
26db0 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
26dc0 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
26dd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26de0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
26df0 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  TS.int sqlite3Ex
26e00 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65  prContainsSubque
26e10 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69  ry(Expr*);.#endi
26e20 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  f.int sqlite3Exp
26e30 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
26e40 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
26e50 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
26e60 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
26e70 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
26e80 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
26e90 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
26ea0 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
26eb0 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
26ec0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26ed0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
26ee0 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
26ef0 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
26f00 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
26f10 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
26f20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
26f30 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
26f40 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
26f50 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
26f60 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
26f70 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
26f80 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
26f90 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
26fa0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
26fb0 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
26fc0 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
26fd0 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
26fe0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26ff0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
27000 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
27010 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
27020 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27050 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
27060 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  t*,int*);.void s
27070 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
27080 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
27090 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
270a0 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
270b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
270c0 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
270d0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
270e0 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
270f0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
27100 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27110 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
27120 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
27130 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27140 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
27150 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
27160 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
27170 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27180 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
27190 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
271a0 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
271b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
271c0 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
271d0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
271e0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
271f0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
27200 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
27210 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
27220 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
27230 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
27240 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
27250 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
27260 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
27270 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
27280 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
27290 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
272a0 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
272b0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
272c0 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
272d0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
272e0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
272f0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
27300 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
27310 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
27320 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
27330 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
27340 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
27350 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27360 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
27370 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
27380 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
27390 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
273a0 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
273b0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
273c0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
273d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
273e0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
273f0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
27400 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
27410 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
27420 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
27430 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
27440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27450 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
27460 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
27470 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
27480 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
27490 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
274a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
274b0 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
274c0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
274d0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
274e0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
274f0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
27500 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
27510 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
27520 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
27530 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
27540 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
27550 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
27560 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
27570 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
27580 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
27590 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
275a0 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
275b0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
275c0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
275d0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
27600 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
27610 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
27620 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
27630 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
27640 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
27650 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
27660 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27670 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
27680 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
27690 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
276a0 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
276b0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
276c0 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
276d0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
276e0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
276f0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
27700 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
27710 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
27720 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
27730 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
27740 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
27750 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
27760 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
27770 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27790 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
277a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
277b0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
277c0 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
277d0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
277e0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
277f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
27800 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
27810 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
27820 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
27830 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27840 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
27850 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
27860 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
27870 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
27880 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
27890 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
278a0 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
278b0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
278c0 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
278d0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
278e0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27910 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
27920 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
27930 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
27940 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
27950 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
27960 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
27970 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
27980 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
27990 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
279a0 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
279b0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
279c0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
279d0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
279e0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
279f0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
27a00 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
27a10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
27a20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
27a30 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
27a40 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
27a50 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
27a60 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
27a70 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
27a80 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
27a90 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
27aa0 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
27ab0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27ac0 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
27ad0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
27ae0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
27af0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
27b00 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
27b10 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
27b20 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
27b30 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
27b40 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
27b50 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
27b60 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
27b70 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
27b80 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
27b90 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
27ba0 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
27bb0 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
27bc0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
27bd0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
27be0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
27bf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
27c00 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
27c10 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
27c20 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
27c30 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
27c40 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
27c50 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
27c60 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
27c70 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
27c80 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
27c90 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
27ca0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
27cb0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
27cc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
27cd0 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
27ce0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
27cf0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
27d00 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
27d10 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
27d20 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
27d30 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
27d40 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
27d50 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
27d60 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
27d70 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
27d80 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
27d90 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
27da0 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
27db0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
27dc0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
27dd0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
27de0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
27df0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
27e00 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
27e10 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
27e20 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
27e30 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
27e40 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
27e50 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
27e60 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
27e70 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
27e80 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
27e90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27ea0 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
27eb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27ec0 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
27ed0 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
27ee0 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
27ef0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
27f00 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
27f10 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
27f20 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
27f30 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
27f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
27f50 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
27f60 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
27f70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
27f80 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
27f90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27fa0 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
27fb0 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
27fc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
27fd0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
27fe0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
27ff0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
28000 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
28010 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
28020 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
28030 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
28040 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
28050 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28060 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
28070 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
28080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
28090 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
280a0 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
280b0 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
280c0 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
280d0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
280e0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
280f0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
28100 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
28110 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
28120 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
28130 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
28140 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
28150 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
28160 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
28170 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
28180 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
28190 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
281a0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
281b0 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
281c0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
281d0 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
281e0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
281f0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
28200 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28210 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
28220 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
28230 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
28240 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
28250 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28260 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
28270 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
28280 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
28290 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
282a0 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
282b0 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
282c0 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
282d0 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
282e0 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
282f0 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
28300 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
28310 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
28320 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
28330 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
28340 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
28350 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
28360 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
28370 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
28380 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
28390 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
283a0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
283b0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
283c0 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
283d0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
283e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
283f0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
28400 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
28410 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
28420 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
28430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
28440 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
28450 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
28460 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
28470 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
28480 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
28490 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
284a0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
284b0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
284c0 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
284d0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
284e0 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
284f0 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
28500 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
28510 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
28520 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
28530 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
28540 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
28550 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
28560 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
28570 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
28580 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
28590 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
285a0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
285b0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
285c0 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
285d0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
285e0 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
285f0 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
28600 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
28610 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
28620 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
28630 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
28640 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
28650 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
28660 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
28670 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
28680 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
28690 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
286a0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
286b0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
286c0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
286d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
286e0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
286f0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
28700 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
28710 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
28720 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
28730 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
28740 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
28750 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
28760 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
28770 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
28780 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
28790 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
287a0 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
287b0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
287c0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
287d0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
287e0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
287f0 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
28800 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
28810 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
28820 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
28830 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
28840 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
28850 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
28860 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
28870 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
28880 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
28890 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
288a0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
288b0 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
288c0 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
288d0 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
288e0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
288f0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
28900 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
28910 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
28920 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
28930 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
28940 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
28950 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
28960 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
28970 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
28980 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
28990 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
289a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
289b0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
289c0 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
289d0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
289e0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
289f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
28a00 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
28a10 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
28a20 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
28a30 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
28a40 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
28a50 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
28a60 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
28a70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
28a80 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
28a90 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
28aa0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
28ab0 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
28ac0 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
28ad0 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
28ae0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
28af0 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
28b00 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
28b10 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
28b20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28b30 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
28b40 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
28b50 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
28b60 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
28b70 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
28b80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
28b90 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
28ba0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28bb0 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
28bc0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
28bd0 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
28be0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
28bf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
28c00 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
28c10 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
28c20 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
28c30 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
28c40 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
28c50 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
28c60 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
28c70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
28c80 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
28c90 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
28ca0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
28cb0 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
28cc0 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
28cd0 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20  void *,u8,.     
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cf0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
28d00 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
28d10 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
28d20 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
28d30 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
28d40 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
28d50 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
28d60 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
28d70 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
28d80 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
28d90 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
28da0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
28db0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
28dc0 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
28dd0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
28de0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
28df0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
28e00 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
28e10 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
28e20 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
28e30 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
28e40 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
28e50 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
28e60 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
28e70 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
28e80 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
28e90 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
28ea0 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
28eb0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
28ec0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
28ed0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
28ee0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
28ef0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
28f00 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
28f10 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
28f20 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
28f30 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
28f40 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
28f50 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
28f60 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
28f70 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
28f80 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
28f90 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
28fa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
28fb0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
28fc0 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
28fd0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
28fe0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
28ff0 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
29000 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29010 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
29020 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
29030 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
29040 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
29050 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
29060 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
29070 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
29080 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
29090 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
290a0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
290b0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
290c0 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
290d0 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
290e0 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
290f0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
29100 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
29110 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
29120 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
29130 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
29140 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
29150 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
29160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
29170 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
29180 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
29190 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
291a0 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
291b0 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
291c0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
291d0 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
291e0 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
291f0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
29200 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29210 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
29220 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
29230 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
29240 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
29250 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
29260 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
29270 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
29280 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
29290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
292a0 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
292b0 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
292c0 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
292d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
292e0 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
292f0 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
29300 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
29310 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29320 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
29330 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
29340 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
29350 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29360 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
29370 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
29380 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
29390 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
293a0 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
293b0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
293c0 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
293d0 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
293e0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
293f0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
29400 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
29410 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
29420 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
29430 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
29440 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
29450 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
29460 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20  ar*, u8*);.void 
29470 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
29480 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
29490 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
294a0 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
294b0 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
294c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
294d0 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
294e0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
294f0 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
29500 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
29510 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
29520 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
29530 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
29540 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
29550 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
29560 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
29570 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
29580 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
29590 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
295a0 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
295b0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
295c0 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
295d0 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
295e0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
295f0 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
29600 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
29610 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
29620 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
29630 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
29640 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
29650 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
29660 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
29670 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
29680 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
29690 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
296a0 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
296b0 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
296c0 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
296d0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
296e0 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
296f0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
29700 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
29710 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
29720 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
29730 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
29740 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
29750 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
29760 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
29770 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
29780 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
29790 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
297a0 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20  , int, void *,. 
297b0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
297c0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
297d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
297e0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
297f0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
29800 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
29810 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
29820 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
29830 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
29840 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
29850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
29860 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
29870 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
29880 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
29890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
298a0 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
298b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
298c0 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
298d0 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
298e0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
298f0 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
29900 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
29910 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
29920 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
29930 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
29940 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
29950 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29960 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
29970 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
29980 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29990 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
299a0 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
299b0 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
299c0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
299d0 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
299e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
299f0 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
29a00 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
29a10 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
29a20 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
29a30 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
29a40 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
29a50 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
29a60 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
29a70 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
29a80 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
29a90 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
29aa0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ab0 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
29ac0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
29ad0 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
29ae0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
29af0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
29b00 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69  _STAT4.void sqli
29b10 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69  te3AnalyzeFuncti
29b20 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
29b30 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
29b40 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  SetValue(Parse*,
29b50 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
29b60 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38  ecord**,Expr*,u8
29b70 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
29b80 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
29b90 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
29ba0 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
29bb0 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
29bc0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
29bd0 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
29be0 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
29bf0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
29c00 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
29c10 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
29c20 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
29c30 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e**);.#endif../*
29c40 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
29c50 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
29c60 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
29c70 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
29c80 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
29c90 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64  *(*)(u64));.void
29ca0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
29cb0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
29cc0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
29cd0 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
29ce0 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
29cf0 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
29d00 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
29d10 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
29d20 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
29d30 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
29d40 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
29d50 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
29d60 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
29d70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29d80 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
29d90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
29da0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
29db0 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
29dc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
29dd0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
29de0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
29df0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
29e00 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
29e10 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
29e20 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
29e30 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
29e40 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
29e50 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29e60 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
29e70 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
29e80 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
29e90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
29ea0 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
29eb0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
29ec0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
29ed0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
29ee0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
29ef0 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
29f00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
29f10 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
29f20 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
29f30 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
29f40 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
29f50 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
29f60 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
29f70 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
29f80 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
29f90 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
29fa0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
29fb0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
29fc0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
29fd0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
29fe0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
29ff0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2a000 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2a010 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2a020 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2a030 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2a040 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2a050 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2a060 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2a070 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2a080 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2a090 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2a0a0 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2a0b0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2a0c0 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2a0d0 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2a0e0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2a0f0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2a100 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2a110 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2a120 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2a130 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2a140 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2a150 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2a160 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2a170 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2a180 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2a190 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2a1a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2a1b0 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2a1c0 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2a1d0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2a1e0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2a1f0 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2a200 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2a210 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2a220 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2a230 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20  le*);.#  define 
2a240 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2a250 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2a260 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2a270 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2a280 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2a290 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2a2a0 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2a2b0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2a2c0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2a2d0 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2a2e0 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2a2f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2a300 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2a310 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2a320 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2a330 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2a340 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2a350 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2a360 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2a370 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2a380 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2a390 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2a3a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2a3b0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2a3c0 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2a3d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2a3e0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2a3f0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2a400 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2a410 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2a420 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2a430 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2a440 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2a450 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2a460 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2a470 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2a480 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2a490 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2a4a0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2a4b0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2a4c0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2a4d0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2a4e0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2a4f0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
2a500 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
2a510 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2a520 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2a530 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2a540 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2a550 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2a560 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2a570 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2a580 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2a590 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2a5a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2a5b0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2a5c0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2a5d0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2a5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2a5f0 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2a600 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2a610 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2a620 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2a630 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2a640 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2a650 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2a660 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2a670 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2a680 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2a690 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2a6a0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2a6b0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2a6c0 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2a6d0 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2a6e0 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2a6f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a700 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2a710 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2a720 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2a730 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2a740 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2a750 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2a760 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2a770 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2a780 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2a790 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2a7a0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2a7b0 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2a7c0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2a7d0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2a7e0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2a7f0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2a800 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2a810 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2a820 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2a830 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2a840 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2a850 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2a860 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2a870 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
2a880 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2a890 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2a8a0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2a8b0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2a8c0 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2a8d0 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2a8e0 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2a8f0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2a900 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2a910 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2a920 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2a930 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2a940 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2a950 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2a960 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2a970 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2a980 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2a990 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2a9a0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2a9b0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2a9c0 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2a9d0 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2a9e0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2a9f0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2aa00 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2aa10 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2aa20 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2aa30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2aa40 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2aa50 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2aa60 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2aa70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2aa80 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2aa90 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2aaa0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2aab0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2aac0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2aad0 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2aae0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2aaf0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2ab00 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2ab10 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2ab20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2ab30 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2ab40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2ab50 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2ab60 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2ab70 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2ab80 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2ab90 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2aba0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2abb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2abc0 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2abd0 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2abe0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2abf0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2ac00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2ac10 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2ac20 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ac30 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2ac40 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2ac50 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2ac60 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2ac70 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2ac80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2ac90 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2aca0 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2acb0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2acc0 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2acd0 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2ace0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2acf0 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2ad00 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2ad10 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2ad20 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2ad30 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2ad40 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2ad50 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2ad60 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2ad70 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2ad80 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2ad90 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2ada0 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2adb0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2adc0 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2add0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2ade0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2adf0 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2ae00 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2ae10 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2ae20 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2ae30 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2ae40 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2ae50 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2ae60 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2ae70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
2ae80 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20  LTIN_TEST.** is 
2ae90 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
2aea0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2aeb0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
2aec0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2aed0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2aee0 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
2aef0 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
2af00 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
2af10 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2af20 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2af30 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
2af40 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
2af50 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
2af60 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
2af70 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
2af80 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  rom sqlite3FindI
2af90 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66  nIndex().*/.#def
2afa0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57  ine IN_INDEX_ROW
2afb0 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a  ID        1   /*
2afc0 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69   Search the rowi
2afd0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  d of the table *
2afe0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2aff0 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
2b000 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e  2   /* Search an
2b010 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65   ephemeral b-tre
2b020 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2b030 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
2b040 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69     3   /* Existi
2b050 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49  ng index ASCENDI
2b060 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2b070 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53  _INDEX_INDEX_DES
2b080 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74  C   4   /* Exist
2b090 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e  ing index DESCEN
2b0a0 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2b0b0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20  IN_INDEX_NOOP   
2b0c0 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20        5   /* No 
2b0d0 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e  table available.
2b0e0 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73   Use comparisons
2b0f0 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65   */./*.** Allowe
2b100 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  d flags for the 
2b110 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  3rd parameter to
2b120 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2b130 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dex()..*/.#defin
2b140 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f  e IN_INDEX_NOOP_
2b150 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  OK     0x0001  /
2b160 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49  * OK to return I
2b170 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a  N_INDEX_NOOP */.
2b180 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2b190 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30  _MEMBERSHIP  0x0
2b1a0 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  002  /* IN opera
2b1b0 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d  tor used for mem
2b1c0 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a  bership test */.
2b1d0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2b1e0 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30  _LOOP        0x0
2b1f0 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  004  /* IN opera
2b200 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f  tor used as a lo
2b210 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  op */.int sqlite
2b220 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
2b230 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33  se *, Expr *, u3
2b240 32 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  2, int*);..int s
2b250 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
2b260 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
2b270 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
2b280 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
2b290 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
2b2a0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
2b2b0 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
2b2c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b2d0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
2b2e0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
2b2f0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
2b300 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23  lite3_file *);.#
2b310 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2b320 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d  e3JournalIsInMem
2b330 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ory(sqlite3_file
2b340 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
2b350 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
2b360 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2b370 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
2b380 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
2b390 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
2b3a0 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
2b3b0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
2b3c0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
2b3d0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2b3e0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
2b3f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2b400 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2b410 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
2b420 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2b430 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2b440 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
2b450 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2b460 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
2b470 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
2b480 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
2b490 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
2b4a0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
2b4b0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
2b4c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
2b4d0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
2b4e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2b4f0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
2b500 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
2b510 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2b520 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2b530 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
2b540 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b550 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2b560 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2b570 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b580 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2b590 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
2b5a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2b5b0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2b5c0 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
2b5d0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2b5e0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
2b5f0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2b600 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2b610 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
2b620 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
2b630 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
2b640 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
2b650 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
2b660 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
2b670 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
2b680 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
2b690 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
2b6a0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
2b6b0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
2b6c0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
2b6d0 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
2b6e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b6f0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
2b700 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
2b710 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
2b720 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
2b730 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
2b740 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2b750 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
2b760 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
2b770 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
2b780 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2b790 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2b7a0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
2b7b0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
2b7c0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
2b7d0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2b7e0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
2b7f0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
2b800 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
2b810 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
2b820 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
2b830 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
2b840 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
2b850 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
2b860 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
2b870 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
2b880 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
2b890 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
2b8a0 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
2b8b0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
2b8c0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2b8d0 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
2b8e0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
2b8f0 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
2b900 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
2b910 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
2b920 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
2b930 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
2b940 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
2b950 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
2b960 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2b970 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
2b980 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
2b990 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2b9a0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2b9b0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2b9c0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2b9d0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2b9e0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2b9f0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2ba00 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
2ba10 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
2ba20 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2ba30 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
2ba40 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2ba50 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
2ba60 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
2ba70 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2ba80 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2ba90 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2baa0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2bab0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2bac0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2bad0 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
2bae0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
2baf0 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
2bb00 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2bb10 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
2bb20 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
2bb30 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
2bb40 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
2bb50 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2bb60 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
2bb70 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
2bb80 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
2bb90 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
2bba0 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
2bbb0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
2bbc0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
2bbd0 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
2bbe0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
2bbf0 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
2bc00 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
2bc10 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2bc20 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
2bc30 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
2bc40 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
2bc50 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
2bc60 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2bc70 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
2bc80 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
2bc90 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
2bca0 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
2bcb0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2bcc0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
2bcd0 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
2bce0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
2bcf0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
2bd00 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
2bd10 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
2bd20 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
2bd30 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
2bd40 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
2bd50 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
2bd60 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
2bd70 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2bd80 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
2bd90 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2bda0 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
2bdb0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2bdc0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
2bdd0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2bde0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2bdf0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
2be00 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2be10 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2be20 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
2be30 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
2be40 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2be50 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
2be60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2be70 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2be80 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
2be90 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2bea0 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
2beb0 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
2bec0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2bed0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2bee0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
2bef0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
2bf00 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
2bf10 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
2bf20 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
2bf30 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
2bf40 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
2bf50 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2bf60 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
2bf70 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
2bf80 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
2bf90 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
2bfa0 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
2bfb0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
2bfc0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
2bfd0 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
2bfe0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
2bff0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
2c000 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
2c010 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2c020 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
2c030 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
2c040 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
2c050 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2c060 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
2c070 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2c080 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
2c090 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
2c0a0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
2c0b0 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51  f..#endif /* _SQ
2c0c0 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a        LITEINT_H_ */.