/ Hex Artifact Content
Login

Artifact d5699c8422fe250ff96696ea3f468cec1faad39d:


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: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
8080: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
8090: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
80a0: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
80b0: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
80c0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
80d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80e0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
80f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
8100: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
8110: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
8120: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
8130: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
8140: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
8150: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
8160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
8170: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
8180: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8190: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
81a0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
81b0: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
81c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
81d0: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
81e0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
81f0: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
8200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
8210: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
8220: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
8230: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
8240: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
8250: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
8260: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
8270: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
8280: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
8290: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
82a0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
82b0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
82c0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
82d0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
82e0: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
82f0: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
8300: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
8310: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
8320: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
8330: 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65  ith;../*.** Defe
8340: 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e  r sourcing vdbe.
8350: 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e  h and btree.h un
8360: 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75  til after the "u
8370: 38 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48  8" and.** "BusyH
8380: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
8390: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
83a0: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
83b0: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
83c0: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
83d0: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
83e0: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
83f0: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
8400: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
8410: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
8420: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
8430: 63 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64  cache.h".#includ
8440: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
8450: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20  e "mutex.h"../* 
8460: 54 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41  The SQLITE_EXTRA
8470: 5f 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65  _DURABLE compile
8480: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65  -time option use
8490: 64 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66  d to set the def
84a0: 61 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e  ault.** synchron
84b0: 6f 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45  ous setting to E
84c0: 58 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20  XTRA.  It is no 
84d0: 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64  longer supported
84e0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
84f0: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
8500: 0a 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53  .# warning Use S
8510: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
8520: 4e 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74  NCHRONOUS=3 inst
8530: 65 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58  ead of SQLITE_EX
8540: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65  TRA_DURABLE.# de
8550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
8560: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8570: 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  3.#endif../*.** 
8580: 44 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e  Default synchron
8590: 6f 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a  ous levels..**.*
85a0: 2a 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72  * Note that (for
85b0: 20 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f   historcal reaso
85c0: 6e 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59  ns) the PAGER_SY
85d0: 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72  NCHRONOUS_* macr
85e0: 6f 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f  os differ.** fro
85f0: 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46  m the SQLITE_DEF
8600: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
8610: 20 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a   value by 1..**.
8620: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47  **           PAG
8630: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  ER_SYNCHRONOUS  
8640: 20 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e       DEFAULT_SYN
8650: 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46  CHRONOUS.**   OF
8660: 46 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20  F           1   
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8680: 20 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52        0.**   NOR
8690: 4d 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20  MAL        2    
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86b0: 20 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c       1.**   FULL
86c0: 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20            3     
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86e0: 20 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41      2.**   EXTRA
86f0: 20 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20           4      
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8710: 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22     3.**.** The "
8720: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
8730: 75 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c  us" statement al
8740: 73 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f  so uses the zero
8750: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a  -based numbers..
8760: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
8770: 73 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  s, the zero-base
8780: 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  d numbers are us
8790: 65 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72  ed for all exter
87a0: 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a  nal interfaces.*
87b0: 2a 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61  * and the one-ba
87c0: 73 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75  sed values are u
87d0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a  sed internally..
87e0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
87f0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
8800: 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53  ONOUS.# define 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 20 28 50 41 47 45 52  NCHRONOUS (PAGER
8830: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 46 55 4c  _SYNCHRONOUS_FUL
8840: 4c 2d 31 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  L-1).#endif.#ifn
8850: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
8860: 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f  LT_WAL_SYNCHRONO
8870: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
8880: 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53  TE_DEFAULT_WAL_S
8890: 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54  YNCHRONOUS SQLIT
88a0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
88b0: 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ONOUS.#endif../*
88c0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
88d0: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
88e0: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
88f0: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
8900: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
8910: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
8920: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
8930: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
8940: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
8950: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
8960: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
8970: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
8980: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
8990: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
89a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
89b0: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
89c0: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
89d0: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
89e0: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
89f0: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
8a00: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
8a10: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
8a20: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
8a30: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
8a40: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
8a50: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
8a60: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
8a70: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
8a80: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
8a90: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
8aa0: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
8ab0: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
8ac0: 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53   disk */.  u8 bS
8ad0: 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20  yncSet;         
8ae0: 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47  /* True if "PRAG
8af0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e  MA synchronous=N
8b00: 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a  " has been run *
8b10: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
8b20: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
8b30: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
8b40: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
8b50: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
8b60: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
8b70: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
8b80: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
8b90: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
8ba0: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
8bb0: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
8bc0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
8bd0: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
8be0: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
8bf0: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
8c00: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
8c10: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
8c20: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
8c30: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
8c40: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
8c50: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
8c60: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
8c70: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
8c80: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
8c90: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
8ca0: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
8cb0: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
8cc0: 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61  ct..**.** Schema
8cd0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
8ce0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
8cf0: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
8d00: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
8d10: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
8d20: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
8d30: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
8d40: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
8d50: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
8d60: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
8d70: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
8d80: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
8d90: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
8da0: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
8db0: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
8dc0: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
8dd0: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
8de0: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
8df0: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
8e00: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
8e10: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
8e20: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
8e30: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
8e40: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
8e50: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
8e60: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
8e70: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
8e80: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
8e90: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
8ea0: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
8eb0: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
8ec0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
8ed0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
8ee0: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
8ef0: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
8f00: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
8f10: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
8f20: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
8f30: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
8f40: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
8f50: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
8f60: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
8f70: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
8f80: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
8f90: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
8fa0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
8fb0: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
8fc0: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
8fd0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
8fe0: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
8ff0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
9000: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
9010: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
9020: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
9030: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
9040: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
9050: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
9060: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
9070: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
9080: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
9090: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
90a0: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
90b0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
90c0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
90d0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
90e0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
90f0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
9100: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
9110: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
9120: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
9130: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
9140: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
9150: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
9160: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
9170: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
9180: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
9190: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
91a0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
91b0: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
91c0: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
91d0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
91e0: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
91f0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
9200: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
9210: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
9220: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
9230: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
9240: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
9250: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
9260: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
9270: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
9280: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
9290: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
92a0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
92b0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
92c0: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
92d0: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
92e0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
92f0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
9300: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
9310: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
9320: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
9330: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
9340: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
9350: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
9360: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
9370: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9380: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
9390: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
93a0: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
93b0: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
93c0: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
93d0: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
93e0: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
93f0: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
9400: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
9410: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
9420: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
9430: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
9440: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
9450: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
9460: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
9470: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
9480: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
9490: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
94a0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
94b0: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
94c0: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
94d0: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
94e0: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
94f0: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
9500: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
9510: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
9520: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
9530: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
9540: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
9550: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
9560: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
9570: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
9580: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
9590: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
95a0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
95b0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
95c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
95d0: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
95e0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
95f0: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
9600: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
9610: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
9620: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
9630: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
9640: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
9650: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
9660: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
9670: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
9680: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
9690: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
96a0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
96b0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
96c0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
96d0: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
96e0: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
96f0: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
9700: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
9710: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
9720: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
9730: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
9740: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
9750: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
9760: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
9770: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
9780: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
9790: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
97a0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
97b0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
97c0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
97d0: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
97e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
97f0: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
9800: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
9810: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
9820: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
9830: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
9840: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
9850: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
9860: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
9870: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
9880: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
9890: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
98a0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
98b0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
98c0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
98d0: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
98e0: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
98f0: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
9900: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
9910: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
9920: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
9930: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
9940: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
9950: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
9960: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
9970: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
9980: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
9990: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
99a0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
99b0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
99c0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
99d0: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
99e0: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
99f0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
9a00: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
9a10: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
9a20: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
9a30: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
9a40: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
9a50: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
9a60: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
9a70: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
9a80: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
9a90: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
9aa0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
9ab0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
9ac0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
9ad0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
9ae0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
9af0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9b00: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
9b10: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
9b20: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
9b30: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
9b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
9b50: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
9b60: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
9b70: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
9b80: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
9b90: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
9ba0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
9bb0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9bc0: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
9bd0: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
9be0: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
9bf0: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
9c00: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
9c10: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
9c20: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
9c30: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
9c40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
9c50: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
9c60: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
9c70: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
9c80: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
9c90: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9ca0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
9cb0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
9cc0: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
9cd0: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
9ce0: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
9cf0: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
9d00: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
9d10: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
9d20: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
9d30: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
9d40: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
9d50: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
9d60: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
9d70: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
9d80: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
9d90: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
9da0: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
9db0: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
9dc0: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
9dd0: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69   chain..*/.#defi
9de0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  ne SQLITE_FUNC_H
9df0: 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74  ASH_SZ 23.struct
9e00: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
9e10: 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49   FuncDef *a[SQLI
9e20: 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d  TE_FUNC_HASH_SZ]
9e30: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
9e40: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
9e50: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
9e60: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
9e70: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
9e80: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
9e90: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
9ea0: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
9eb0: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
9ec0: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
9ed0: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
9ee0: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
9ef0: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
9f00: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
9f10: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
9f20: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
9f30: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
9f40: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
9f50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
9f60: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
9f70: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
9f80: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9fa0: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
9fb0: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
9fc0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fe0: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
9ff0: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
a000: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
a010: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
a020: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
a030: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
a040: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
a050: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
a060: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
a070: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
a080: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
a090: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
a0a0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
a0b0: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
a0c0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
a0d0: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
a0e0: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
a0f0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
a100: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
a110: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
a120: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
a130: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
a140: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
a150: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
a160: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
a170: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
a180: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
a190: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
a1a0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
a1b0: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
a1c0: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
a1d0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
a1e0: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
a1f0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
a200: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
a210: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
a220: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
a230: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
a240: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
a250: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
a260: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
a270: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
a280: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
a290: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
a2a0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
a2b0: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
a2c0: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
a2d0: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
a2e0: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
a2f0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
a300: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
a310: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
a320: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
a330: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
a340: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
a350: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
a360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
a380: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
a390: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
a3a0: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
a3b0: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
a3c0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
a3d0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a3e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
a410: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
a420: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  f.../*.** Each d
a430: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a440: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
a450: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
a460: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
a470: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
a480: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
a490: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
a4a0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
a4b0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
a4c0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
a4d0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
a4e0: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
a4f0: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
a500: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
a510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
a520: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
a530: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
a540: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
a550: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
a560: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
a570: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
a580: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
a590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5a0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
a5b0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a5e0: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
a5f0: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
a600: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a620: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
a630: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
a640: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
a650: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
a660: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
a670: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
a680: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
a690: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6b0: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
a6c0: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
a6d0: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
a6e0: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
a6f0: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
a700: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
a710: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
a720: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
a730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
a740: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
a750: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
a760: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a780: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
a790: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
a7a0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
a7b0: 2f 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e  /.  int iSysErrn
a7c0: 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o;              
a7d0: 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65    /* Errno value
a7e0: 20 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65   from last syste
a7f0: 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36  m error */.  u16
a800: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
a810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
a820: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
a830: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
a840: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ons */.  u8 enc;
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a860: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
a870: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20  ncoding */.  u8 
a880: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
a890: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
a8a0: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
a8b0: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ag. */.  u8 bCon
a8c0: 63 75 72 72 65 6e 74 3b 20 20 20 20 20 20 20 20  current;        
a8d0: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
a8e0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
a8f0: 20 22 43 4f 4e 43 55 52 52 45 4e 54 22 20 2a 2f   "CONCURRENT" */
a900: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
a910: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a920: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
a930: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
a940: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
a950: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
a960: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
a970: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
a980: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
a990: 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c    u8 bBenignMall
a9a0: 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
a9b0: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72  /* Do not requir
a9c0: 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a  e OOMs if true *
a9d0: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
a9e0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
a9f0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
aa00: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
aa10: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
aa20: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
aa30: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
aa40: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
aa50: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
aa60: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
aa70: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
aa80: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
aa90: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
aaa0: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
aab0: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
aac0: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
aad0: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
aae0: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
aaf0: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
ab00: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
ab10: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
ab20: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
ab30: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
ab40: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
ab50: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
ab60: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
ab70: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
ab80: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
ab90: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
abc0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
abd0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
abe0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ac00: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
ac10: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
ac20: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
ac30: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
ac40: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
ac50: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
ac60: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
ac70: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
ac80: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
ac90: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
aca0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
acb0: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
acc0: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
acd0: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
ace0: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
acf0: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
ad00: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
ad10: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
ad20: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
ad30: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
ad40: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
ad50: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
ad60: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
ad70: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
ad80: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
ad90: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
adb0: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
adc0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
add0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
ade0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
adf0: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
ae00: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
ae10: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
ae20: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
ae30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
ae40: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
ae50: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
ae60: 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69  gger */.    u8 i
ae70: 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20  mposterTable;   
ae80: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64          /* Build
ae90: 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20  ing an imposter 
aea0: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69  table */.  } ini
aeb0: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
aec0: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
aed0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
aee0: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
aef0: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
af00: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
af10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
af20: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
af30: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
af40: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
af50: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
af60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
af70: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
af80: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
af90: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
afa0: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
afc0: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
afd0: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
afe0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
aff0: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
b000: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b010: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
b020: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
b030: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
b040: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
b050: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b060: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
b070: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
b080: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
b090: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
b0a0: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
b0b0: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76  y handles */.  v
b0c0: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
b0d0: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
b0e0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
b0f0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
b100: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
b110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b130: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
b140: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
b150: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
b160: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
b170: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
b180: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
b190: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
b1a0: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1c0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
b1d0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
b1e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
b1f0: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
b200: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b210: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
b220: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
b230: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
b240: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
b250: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
b260: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
b270: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
b280: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b290: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b2a0: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
b2b0: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
b2c0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
b2d0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
b2e0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
b2f0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
b300: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
b310: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
b320: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
b330: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
b340: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
b350: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64  te_int64);.#ifnd
b360: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
b370: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
b380: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
b390: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
b3a0: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
b3b0: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
b3c0: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
b3d0: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
b3e0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
b3f0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
b400: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
b410: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
b420: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
b430: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
b440: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
b450: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
b460: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
b470: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
b480: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
b490: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
b4a0: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
b4b0: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
b4c0: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
b4d0: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
b4e0: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
b4f0: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
b500: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
b510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
b520: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
b530: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
b540: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
b550: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
b560: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
b570: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
b580: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
b590: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
b5a0: 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20  xauth xAuth;    
b5b0: 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20        /* Access 
b5c0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75  authorization fu
b5d0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
b5e0: 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20   *pAuthArg;     
b5f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
b600: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
b610: 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e   access auth fun
b620: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
b630: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b640: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
b650: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50  LBACK.  int (*xP
b660: 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29  rogress)(void *)
b670: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f  ;     /* The pro
b680: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
b690: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72  /.  void *pProgr
b6a0: 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  essArg;         
b6b0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b6c0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
b6d0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69  llback */.  unsi
b6e0: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70  gned nProgressOp
b6f0: 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  s;        /* Num
b700: 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66  ber of opcodes f
b710: 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  or progress call
b720: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  back */.#endif.#
b730: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b740: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
b750: 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20    int nVTrans;  
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b770: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
b780: 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a  e of aVTrans */.
b790: 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20    Hash aModule; 
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20  /* populated by 
b7c0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
b7d0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61  odule() */.  Vta
b7e0: 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20  bCtx *pVtabCtx; 
b7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
b800: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
b810: 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72   vtab connect/cr
b820: 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  eate */.  VTable
b830: 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20   **aVTrans;     
b840: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75          /* Virtu
b850: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  al tables with o
b860: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  pen transactions
b870: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44   */.  VTable *pD
b880: 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a  isconnect;    /*
b890: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
b8a0: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
b8b0: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
b8c0: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
b8d0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
b8e0: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
b8f0: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
b900: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
b910: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b930: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
b940: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
b950: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
b960: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
b970: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
b980: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
b990: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
b9a0: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
b9b0: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
b9c0: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
b9d0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
b9e0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
b9f0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
ba00: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
ba10: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
ba20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ba30: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
ba40: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
ba50: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
ba60: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
ba70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ba80: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
ba90: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
baa0: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bac0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
bad0: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
bae0: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
baf0: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
bb00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bb10: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
bb20: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
bb30: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
bb40: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
bb50: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
bb60: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
bb70: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
bb80: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
bb90: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
bba0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
bbb0: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
bbc0: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
bbd0: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
bbe0: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
bbf0: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
bc00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
bc10: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
bc20: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
bc30: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
bc40: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
bc50: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
bc60: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
bc70: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
bc80: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
bc90: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
bca0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
bcb0: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
bcc0: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
bcd0: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
bce0: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
bcf0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
bd00: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
bd10: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
bd20: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
bd30: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
bd40: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
bd50: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
bd60: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
bd70: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
bd80: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
bd90: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
bda0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
bdb0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
bdc0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
bdd0: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
bde0: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
bdf0: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
be00: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
be10: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
be20: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
be30: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
be40: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
be70: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
be80: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
be90: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
bea0: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
beb0: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
bec0: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
bed0: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
bee0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
bef0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
bf00: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
bf10: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
bf20: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
bf30: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
bf40: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
bf50: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
bf60: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
bf70: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
bf80: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
bf90: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
bfa0: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
bfb0: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
bfc0: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
bfd0: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
bfe0: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
bff0: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
c000: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
c010: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
c020: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
c030: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
c040: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
c050: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
c060: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
c070: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
c080: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
c090: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
c0a0: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
c0b0: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
c0c0: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
c0d0: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
c0e0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
c0f0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
c100: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
c110: 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  04  /* Show full
c120: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
c130: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
c140: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
c150: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30  ync      0x00000
c160: 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  008  /* Use full
c170: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
c180: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
c190: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
c1a0: 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31  FSync  0x0000001
c1b0: 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  0  /* Use full f
c1c0: 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f  sync for checkpo
c1d0: 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
c1e0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
c1f0: 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20       0x00000020 
c200: 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20   /* OK to spill 
c210: 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23  pager cache */.#
c220: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
c230: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
c240: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
c250: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
c260: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
c270: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
c280: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
c290: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
c2a0: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
c2b0: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
c2f0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
c300: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c330: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
c340: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
c350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c360: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
c370: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
c380: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
c390: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
c3a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3d0: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
c3e0: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
c3f0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
c400: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
c410: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
c420: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
c430: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
c440: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
c450: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
c460: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
c470: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
c480: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
c490: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
c4a0: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
c4b0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
c4c0: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
c4d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c4e0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
c4f0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
c500: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
c510: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
c520: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c530: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
c540: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
c550: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
c560: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
c570: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c580: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
c590: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
c5a0: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
c5b0: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
c5c0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
c5d0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
c5e0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
c5f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
c600: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
c610: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
c620: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
c630: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
c640: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
c650: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
c660: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
c670: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
c680: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
c690: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
c6a0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
c6b0: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
c6c0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
c6d0: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
c6e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c6f0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
c700: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
c710: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
c720: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
c730: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c740: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
c750: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
c760: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
c770: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
c780: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
c790: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
c7a0: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
c7b0: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
c7c0: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
c7d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
c7e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
c7f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
c800: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
c810: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
c820: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
c830: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
c840: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
c850: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
c860: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
c870: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
c880: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
c890: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
c8a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c8b0: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
c8c0: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
c8d0: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
c8e0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
c8f0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
c900: 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30          0x040000
c910: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
c920: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
c930: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c940: 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  E_Vacuum        
c950: 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20   0x08000000  /* 
c960: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
c970: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
c980: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
c990: 43 6b 20 20 20 20 20 30 78 31 30 30 30 30 30 30  Ck     0x1000000
c9a0: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
c9b0: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
c9c0: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
c9d0: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
c9e0: 69 7a 65 72 20 20 30 78 32 30 30 30 30 30 30 30  izer  0x20000000
c9f0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
ca00: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
ca10: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
ca20: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
ca30: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
ca40: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
ca50: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
ca60: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
ca70: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
ca80: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
ca90: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
caa0: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
cab0: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
cac0: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
cad0: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
cae0: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
caf0: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
cb00: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
cb10: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
cb20: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
cb30: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
cb40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cb50: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
cb60: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
cb70: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
cb80: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
cb90: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
cba0: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
cbb0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
cbc0: 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20  toring */./*    
cbd0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20              not 
cbe0: 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20  used    0x0010  
cbf0: 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f   // Was: SQLITE_
cc00: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a  IdxRealAsInt */.
cc10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
cc20: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
cc30: 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0020   /* DISTIN
cc40: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
cc50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cc60: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
cc70: 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f    0x0040   /* Co
cc80: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
cc90: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
cca0: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ccb0: 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20  oin 0x0080   /* 
ccc0: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ccd0: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
cce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75  define SQLITE_Su
ccf0: 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30  bqCoroutine  0x0
cd00: 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74  100   /* Evaluat
cd10: 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20  e subqueries as 
cd20: 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64  coroutines */.#d
cd30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
cd40: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32  nsitive     0x02
cd50: 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  00   /* Transiti
cd60: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
cd70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cd80: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
cd90: 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0400   /* Omit
cda0: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
cdb0: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
cdc0: 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34  ne SQLITE_Stat34
cdd0: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20           0x0800 
cde0: 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f    /* Use STAT3 o
cdf0: 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a  r STAT4 data */.
ce00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
ce10: 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78  ursorHints    0x
ce20: 32 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50  2000   /* Add OP
ce30: 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f  _CursorHint opco
ce40: 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  des */.#define S
ce50: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
ce60: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
ce70: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
ce80: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
ce90: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
cea0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
ceb0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
cec0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
ced0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
cee0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
cef0: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
cf00: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
cf10: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
cf20: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
cf30: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
cf40: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
cf50: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
cf60: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
cf70: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
cf80: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
cf90: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
cfa0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
cfb0: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
cfc0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
cfd0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
cfe0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
cff0: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
d000: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
d010: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
d020: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
d030: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
d040: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
d050: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
d060: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
d070: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
d080: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
d090: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
d0a0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
d0b0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
d0c0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
d0d0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
d0e0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
d0f0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
d100: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
d110: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
d120: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
d130: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
d140: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
d150: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
d160: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
d170: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
d180: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
d190: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
d1a0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
d1b0: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
d1c0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
d1d0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
d1e0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
d1f0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
d200: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
d210: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
d220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d230: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
d240: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
d250: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
d260: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
d270: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
d280: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
d290: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
d2a0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
d2b0: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
d2c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
d2d0: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
d2e0: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
d2f0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
d300: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
d310: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
d320: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
d330: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
d340: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
d350: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
d360: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
d370: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
d380: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
d390: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
d3a0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
d3b0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
d3c0: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
d3d0: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
d3e0: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
d3f0: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
d400: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
d410: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
d420: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
d430: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
d440: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
d450: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
d460: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
d470: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
d480: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
d490: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
d4a0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
d4b0: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
d4c0: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
d4d0: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
d4e0: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
d4f0: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
d500: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d510: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
d520: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
d530: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
d540: 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20   u16 funcFlags; 
d550: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
d560: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
d570: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
d580: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
d590: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
d5a0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
d5b0: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
d5c0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
d5d0: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
d5e0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
d5f0: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
d600: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
d610: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
d620: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
d630: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
d640: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
d650: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
d680: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
d690: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
d6a0: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
d6b0: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
d6c0: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
d6d0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
d6e0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
d6f0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
d700: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
d710: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
d720: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
d730: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
d740: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
d750: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
d760: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
d770: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
d780: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
d790: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
d7a0: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
d7b0: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
d7c0: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
d7d0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
d7e0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
d7f0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
d800: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
d810: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
d820: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
d830: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
d840: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
d850: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
d860: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
d870: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
d880: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
d890: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
d8a0: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
d8b0: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
d8c0: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
d8d0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
d8e0: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
d8f0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
d900: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
d910: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
d920: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
d930: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
d940: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
d950: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
d960: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
d970: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
d980: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
d990: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
d9a0: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
d9b0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
d9c0: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
d9d0: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
d9e0: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
d9f0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
da00: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
da10: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
da20: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
da30: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
da40: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
da50: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
da60: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
da70: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
da80: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
da90: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
daa0: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
dab0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
dac0: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
dad0: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
dae0: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
daf0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
db00: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
db10: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
db20: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
db30: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
db40: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
db50: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
db60: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
db70: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
db80: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
db90: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
dba0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
dbb0: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
dbc0: 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  this..*/.#define
dbd0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
dbe0: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
dbf0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
dc00: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
dc10: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
dc20: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
dc30: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
dc40: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
dc50: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
dc60: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
dc70: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
dc80: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
dc90: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
dca0: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
dcb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dcc0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
dcd0: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
dce0: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
dcf0: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
dd00: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
dd10: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
dd20: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
dd30: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
dd40: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
dd50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
dd60: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
dd70: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
dd80: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
dd90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dda0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
ddb0: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
ddc0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
ddd0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
dde0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
ddf0: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
de00: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
de10: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
de20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
de30: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
de40: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
de50: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
de60: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
de70: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
de80: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
de90: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
dea0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
deb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
dec0: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
ded0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
dee0: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
def0: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
df00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
df10: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
df20: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
df30: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
df40: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
df50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
df60: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
df70: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
df80: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
df90: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
dfc0: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
dfd0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
dfe0: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
dff0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
e000: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
e010: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
e020: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
e030: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
e040: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
e050: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
e060: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
e070: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
e080: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
e090: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
e0a0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
e0b0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
e0c0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
e0d0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
e0e0: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
e0f0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
e100: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
e110: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
e120: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
e130: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
e140: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
e150: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
e160: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
e170: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
e180: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
e190: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
e1a0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
e1b0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
e1c0: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
e1d0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
e1e0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
e1f0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
e200: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
e210: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
e220: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e230: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
e240: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
e250: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
e260: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
e270: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
e280: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
e290: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
e2a0: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
e2b0: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
e2c0: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
e2d0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
e2e0: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
e2f0: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
e300: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
e310: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
e320: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
e330: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
e340: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
e350: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
e360: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
e370: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
e380: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
e390: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
e3a0: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
e3b0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
e3c0: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
e3d0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
e3e0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
e3f0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
e400: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
e410: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
e420: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
e430: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
e440: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
e450: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
e460: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
e470: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
e480: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
e490: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
e4a0: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
e4b0: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
e4c0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
e4d0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
e4e0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
e4f0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
e500: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
e510: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
e520: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
e530: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
e540: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
e550: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
e560: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
e570: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
e580: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
e590: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
e5a0: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
e5b0: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
e5c0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
e5d0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
e5e0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
e5f0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
e600: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
e610: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
e620: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
e630: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
e640: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
e650: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
e660: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
e670: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e680: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
e690: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
e6a0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
e6b0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
e6c0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
e6d0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
e6e0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
e6f0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
e700: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
e710: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
e720: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e730: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
e740: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
e750: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
e760: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
e770: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e780: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
e790: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
e7a0: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
e7b0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
e7c0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
e7d0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
e7e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
e7f0: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
e800: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
e810: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
e820: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
e830: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
e840: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
e850: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
e860: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
e870: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e880: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
e890: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
e8a0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
e8b0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
e8c0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
e8d0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
e8e0: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
e8f0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
e900: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
e910: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
e920: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
e930: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
e940: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
e950: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
e960: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
e970: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
e980: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
e990: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
e9a0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
e9b0: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
e9c0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
e9d0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
e9e0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
e9f0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
ea00: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
ea10: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
ea20: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
ea30: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
ea40: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
ea50: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
ea60: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
ea70: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
ea80: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
ea90: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
eaa0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
eab0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
eac0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
ead0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
eae0: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
eaf0: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
eb00: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
eb10: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
eb20: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
eb30: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
eb40: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
eb50: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
eb60: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
eb70: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
eb80: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
eb90: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
eba0: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
ebb0: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
ebc0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
ebd0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
ebe0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
ebf0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
ec00: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
ec10: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
ec20: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
ec30: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
ec40: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
ec50: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
ec60: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
ec70: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
ec80: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
ec90: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
eca0: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
ecb0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ecd0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
ece0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
ecf0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
ed00: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
ed10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ed20: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
ed30: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
ed40: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
ed50: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
ed60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ed70: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
ed80: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
ed90: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
edb0: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
edc0: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
edd0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
ede0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
edf0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
ee00: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
ee10: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
ee20: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
ee30: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
ee40: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
ee50: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
ee60: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
ee70: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
ee80: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
ee90: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
eea0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
eeb0: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
eec0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
eed0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
eee0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
eef0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
ef00: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
ef10: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
ef20: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
ef30: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
ef40: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
ef50: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
ef60: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
ef70: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
ef80: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
ef90: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
efa0: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
efb0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
efd0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
efe0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
eff0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
f000: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
f020: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
f030: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
f040: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
f050: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
f060: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
f070: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f080: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
f090: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f0b0: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
f0c0: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
f0d0: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
f0e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f0f0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
f100: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
f110: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
f120: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
f130: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
f140: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
f150: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
f160: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
f170: 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
f180: 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
f190: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
f1a0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
f1b0: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
f1c0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
f1d0: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
f1e0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
f1f0: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
f200: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
f210: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
f220: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
f230: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
f240: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
f250: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f260: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
f270: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
f280: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
f290: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
f2a0: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f2b0: 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
f2c0: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
f2d0: 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
f2e0: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
f2f0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
f300: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
f310: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
f320: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
f330: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
f340: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
f350: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
f360: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
f370: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
f380: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
f390: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
f3a0: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
f3b0: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
f3c0: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
f3d0: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
f3e0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
f3f0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
f400: 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
f410: 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
f420: 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
f430: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
f440: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
f450: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
f460: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
f470: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
f480: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
f490: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
f4a0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
f4b0: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
f4c0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
f4d0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
f4e0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
f4f0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
f500: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
f510: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
f520: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
f530: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
f540: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
f550: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
f560: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
f570: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
f580: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
f590: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
f5a0: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
f5b0: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
f5c0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
f5d0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f5e0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
f5f0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
f600: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
f610: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
f620: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
f630: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
f640: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
f650: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
f660: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
f670: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
f680: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
f690: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
f6a0: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
f6b0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
f6c0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
f6d0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
f6e0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
f6f0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
f700: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
f710: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
f720: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f730: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
f740: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
f750: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
f760: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
f770: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
f780: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
f790: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
f7a0: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
f7b0: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
f7c0: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
f7d0: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
f7e0: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
f7f0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
f800: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
f810: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
f820: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
f830: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
f840: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
f850: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
f860: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
f870: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
f880: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
f890: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
f8a0: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
f8b0: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
f8c0: 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
f8d0: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
f8e0: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
f8f0: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
f900: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
f910: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
f920: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
f930: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
f940: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
f950: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
f960: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
f970: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
f980: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
f990: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
f9a0: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
f9b0: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
f9c0: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
f9d0: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
f9e0: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
f9f0: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
fa00: 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
fa10: 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
fa20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fa30: 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
fa40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fa50: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
fa60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fa70: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
fa80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fa90: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
faa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fab0: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
fac0: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
fad0: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
fae0: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
faf0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
fb00: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
fb10: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
fb20: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
fb30: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
fb40: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
fb50: 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
fb60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
fb70: 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
fb80: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
fb90: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
fba0: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
fbb0: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
fbc0: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
fbd0: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
fbe0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
fbf0: 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
fc00: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
fc10: 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
fc20: 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
fc30: 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
fc40: 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
fc50: 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
fc60: 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
fc70: 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
fc80: 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
fc90: 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
fca0: 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
fcb0: 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
fcc0: 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
fcd0: 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
fce0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
fcf0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
fd00: 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
fd10: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
fd20: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
fd30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
fd40: 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
fd50: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
fd60: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
fd70: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
fd80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
fd90: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
fda0: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
fdb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
fdc0: 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
fdd0: 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
fde0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
fdf0: 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
fe00: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
fe10: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
fe20: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
fe30: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
fe40: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
fe50: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
fe60: 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
fe70: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
fe80: 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
fe90: 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
fea0: 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
feb0: 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
fec0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
fed0: 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
fee0: 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
fef0: 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
ff00: 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
ff10: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
ff20: 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
ff30: 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
ff40: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
ff50: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
ff60: 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
ff70: 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
ff80: 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
ff90: 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
ffa0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
ffb0: 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
ffc0: 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
ffd0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ffe0: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
fff0: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
10000 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
10010 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
10020 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
10030 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
10040 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
10050 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
10060 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
10070 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
10080 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
10090 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
100a0 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
100b0 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
100c0 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
100d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
100e0 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
100f0 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
10100 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
10110 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
10120 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
10130 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
10140 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
10150 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
10160 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
10170 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
10180 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
10190 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
101a0 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
101b0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
101c0 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
101d0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
101e0 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
101f0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
10200 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
10210 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
10220 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
10230 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
10240 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
10250 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
10260 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
10270 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
10280 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
10290 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
102a0 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
102b0 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
102c0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
102d0 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
102e0 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
102f0 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
10300 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
10310 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
10320 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
10330 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
10340 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
10350 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
10360 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
10370 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10380 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
10390 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
103a0 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
103b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
103c0 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
103d0 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
103e0 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
103f0 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
10400 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
10410 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
10420 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
10430 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
10440 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
10450 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
10460 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
10470 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
10480 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
10490 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
104a0 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
104b0 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
104c0 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
104d0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
104e0 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
104f0 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
10500 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
10510 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
10520 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
10530 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
10540 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
10550 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
10560 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
10570 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
10580 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
10590 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
105a0 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
105b0 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
105c0 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
105d0 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
105e0 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
105f0 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
10600 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
10610 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
10620 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
10630 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
10640 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
10650 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
10660 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
10670 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
10680 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
10690 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
106a0 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
106b0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
106c0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
106d0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
106e0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
106f0 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
10700 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
10710 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
10720 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
10730 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
10740 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
10750 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
10760 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
10770 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
10780 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
10790 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
107a0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
107b0 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
107c0 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
107d0 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
107e0 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
107f0 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
10800 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
10810 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
10820 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
10830 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
10840 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
10850 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
10860 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10880 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
10890 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
108a0 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
108b0 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
108c0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
108d0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
108e0 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
108f0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
10900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
10910 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
10920 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
10930 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
10940 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
10950 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
10960 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
10970 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
10980 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
10990 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
109a0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
109b0 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
109c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
109d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
109e0 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
109f0 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
10a00 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
10a10 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
10a20 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
10a30 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
10a40 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
10a50 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
10a60 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
10a70 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
10a80 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
10a90 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
10aa0 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
10ab0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
10ac0 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
10ad0 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
10ae0 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
10af0 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
10b00 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
10b10 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
10b20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
10b30 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
10b40 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
10b50 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
10b60 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
10b70 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
10b80 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
10b90 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
10ba0 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
10bb0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
10bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10bd0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
10be0 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
10bf0 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
10c00 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
10c10 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
10c20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
10c30 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
10c40 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
10c50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
10c60 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
10c70 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
10c80 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
10c90 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
10ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10cb0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10cc0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
10cd0 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
10ce0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10cf0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
10d00 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
10d10 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
10d20 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
10d30 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
10d40 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
10d50 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
10d60 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
10d70 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
10d80 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
10d90 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
10da0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
10db0 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
10dc0 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
10dd0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
10de0 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
10df0 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
10e00 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
10e10 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
10e20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
10e30 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
10e40 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
10e50 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
10e60 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
10e70 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
10e80 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
10e90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10ea0 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
10eb0 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
10ec0 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
10ed0 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
10ee0 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
10ef0 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
10f00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
10f10 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
10f20 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
10f30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
10f40 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
10f50 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
10f60 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
10f70 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
10f80 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
10f90 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
10fa0 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
10fb0 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
10fc0 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
10fd0 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
10fe0 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
10ff0 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
11000 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
11010 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
11020 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11030 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
11040 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
11050 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
11060 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
11070 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
11080 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
11090 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
110a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
110b0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
110c0 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
110d0 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
110e0 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65  applies to table
110f0 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68  s or view that h
11100 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
11110 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
11120 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
11130 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
11140 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
11150 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
11160 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
11170 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
11180 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
11190 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
111a0 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
111b0 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
111c0 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
111d0 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
111e0 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
111f0 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
11200 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
11210 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
11220 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
11230 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
11240 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
11250 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
11260 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
11270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
11280 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
11290 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
112a0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
112b0 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
112c0 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
112d0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
112e0 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
112f0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
11300 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
11310 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
11320 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
11330 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
11340 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
11350 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
11360 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
11370 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11380 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
11390 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
113a0 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
113b0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
113c0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
113d0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
113e0 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
113f0 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
11400 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
11410 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
11420 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
11430 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
11440 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
11450 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
11460 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
11470 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
11480 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11490 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
114a0 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
114b0 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
114c0 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
114d0 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
114e0 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
114f0 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
11500 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
11510 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
11520 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
11530 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
11540 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
11550 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
11560 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
11570 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
11580 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
11590 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
115a0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
115b0 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
115c0 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
115d0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
115e0 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
115f0 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
11600 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
11610 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
11620 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
11630 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
11640 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
11650 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
11660 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
11670 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
11680 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
11690 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
116a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
116b0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
116c0 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
116d0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
116e0 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
116f0 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
11700 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
11710 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
11720 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
11730 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
11740 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
11750 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
11760 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
11770 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11780 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
11790 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
117a0 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
117b0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
117c0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
117d0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
117e0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
117f0 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
11800 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
11810 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
11820 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
11830 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
11840 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
11850 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
11860 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
11870 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
11880 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
11890 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
118a0 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
118b0 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
118c0 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
118d0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
118e0 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
118f0 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
11900 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
11910 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
11920 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11930 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
11940 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
11950 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
11960 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
11970 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
11980 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
11990 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
119a0 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
119b0 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
119c0 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
119d0 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
119e0 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
119f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
11a00 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
11a10 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
11a20 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
11a30 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
11a40 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
11a50 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
11a60 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
11a70 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
11a80 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
11a90 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
11aa0 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
11ab0 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
11ac0 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
11ad0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
11ae0 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
11af0 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
11b00 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
11b10 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
11b20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
11b30 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
11b40 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
11b50 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
11b60 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
11b70 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
11b80 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
11b90 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11ba0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
11bb0 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
11bc0 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
11bd0 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
11be0 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
11bf0 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
11c00 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
11c10 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
11c20 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
11c30 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
11c40 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
11c50 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
11c60 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
11c70 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
11c80 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
11c90 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
11ca0 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
11cb0 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
11cc0 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
11cd0 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
11ce0 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
11cf0 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
11d00 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
11d10 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
11d20 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
11d30 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
11d40 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
11d50 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
11d60 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
11d70 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
11d80 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
11d90 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
11da0 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
11db0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
11dc0 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
11dd0 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
11de0 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
11df0 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
11e00 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
11e10 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
11e20 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
11e30 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
11e40 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
11e50 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
11e60 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
11e70 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
11e80 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
11e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11ea0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
11eb0 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
11ec0 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
11ed0 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
11ee0 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
11ef0 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
11f00 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
11f10 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
11f20 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
11f30 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
11f40 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
11f50 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
11f60 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
11f70 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
11f80 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
11f90 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
11fa0 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
11fb0 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
11fc0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
11fd0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
11fe0 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
11ff0 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
12000 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
12010 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
12020 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
12030 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
12040 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
12050 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
12060 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
12070 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
12080 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
12090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
120a0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
120b0 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
120c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
120d0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
120e0 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
120f0 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
12100 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
12110 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
12120 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12130 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
12140 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
12150 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
12160 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
12170 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
12180 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
12190 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
121a0 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
121b0 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
121c0 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
121d0 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
121e0 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
121f0 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
12200 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
12210 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
12220 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
12230 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
12240 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
12250 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
12260 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
12270 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
12280 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
12290 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
122a0 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
122b0 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
122c0 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
122d0 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
122e0 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
122f0 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
12300 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
12310 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
12320 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
12330 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
12340 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
12350 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
12360 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
12370 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
12380 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
12390 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
123a0 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
123b0 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
123c0 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
123d0 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
123e0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
123f0 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
12400 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
12410 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
12420 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
12430 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
12440 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
12450 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
12460 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
12470 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
12480 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
12490 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
124a0 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
124b0 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
124c0 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
124d0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
124e0 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
124f0 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
12500 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
12510 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
12520 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
12530 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
12540 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
12550 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
12560 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
12570 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
12580 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
12590 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
125a0 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
125b0 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
125c0 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
125d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
125e0 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
125f0 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
12600 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
12610 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
12620 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
12630 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
12640 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
12650 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
12660 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
12670 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
12680 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
12690 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
126a0 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
126b0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
126c0 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
126d0 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
126e0 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
126f0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
12700 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
12710 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
12720 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
12730 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
12740 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
12750 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
12760 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
12770 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
12780 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
12790 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
127a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
127b0 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
127c0 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
127d0 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
127e0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
127f0 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
12800 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
12810 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
12820 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
12830 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
12840 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
12850 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
12860 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
12870 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
12880 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
12890 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
128a0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
128b0 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
128c0 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
128d0 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
128e0 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
128f0 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
12900 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
12910 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
12920 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
12930 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
12940 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
12950 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
12960 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
12970 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
12980 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
12990 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
129a0 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
129b0 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
129c0 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
129d0 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
129e0 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
129f0 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
12a00 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
12a10 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
12a20 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
12a30 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
12a40 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
12a50 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
12a60 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
12a70 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
12a80 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
12a90 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
12aa0 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
12ab0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12ac0 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
12ad0 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
12ae0 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
12af0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
12b00 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
12b10 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
12b20 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
12b30 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
12b40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12b50 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
12b60 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
12b70 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
12b80 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12b90 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
12ba0 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
12bb0 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
12bc0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
12bd0 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
12be0 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
12bf0 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
12c00 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
12c10 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
12c20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
12c30 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
12c40 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
12c50 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
12c60 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
12c70 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
12c80 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
12c90 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
12ca0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
12cb0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
12cc0 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
12cd0 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
12ce0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
12cf0 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
12d00 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
12d10 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
12d20 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
12d30 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
12d40 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
12d50 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
12d60 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
12d70 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
12d80 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
12d90 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
12da0 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
12db0 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
12dc0 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
12dd0 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
12de0 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
12df0 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
12e00 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
12e10 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
12e20 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
12e30 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
12e40 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
12e50 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
12e60 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
12e70 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
12e80 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
12e90 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
12ea0 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
12eb0 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
12ec0 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
12ed0 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
12ee0 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
12ef0 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
12f00 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
12f10 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
12f20 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
12f30 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
12f40 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
12f50 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
12f60 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
12f70 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
12f80 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
12f90 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
12fa0 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
12fb0 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
12fc0 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
12fd0 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
12fe0 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
12ff0 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
13000 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
13010 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
13020 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
13030 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
13040 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
13050 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
13060 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
13070 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
13080 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
13090 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
130a0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
130b0 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
130c0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
130d0 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
130e0 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
130f0 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
13100 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
13110 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
13120 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
13130 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
13140 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
13150 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
13160 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
13170 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
13180 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
13190 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
131a0 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
131b0 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
131c0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
131d0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
131e0 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
131f0 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
13200 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
13210 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
13220 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
13230 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
13240 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
13250 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
13260 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
13270 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
13280 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
13290 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
132a0 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
132b0 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
132c0 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
132d0 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
132e0 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
132f0 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
13300 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
13310 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
13320 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
13330 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
13340 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
13350 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
13360 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
13370 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
13380 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
13390 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
133a0 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
133b0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
133c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
133d0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
133e0 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
133f0 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
13400 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
13410 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
13420 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
13430 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
13440 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
13450 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
13460 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
13470 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
13480 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13490 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
134a0 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
134b0 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
134c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
134d0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
134e0 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
134f0 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
13500 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
13510 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
13520 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
13530 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
13540 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
13550 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
13560 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
13570 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
13580 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
13590 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
135a0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
135b0 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
135c0 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
135d0 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
135e0 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
135f0 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
13600 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
13610 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
13620 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
13630 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
13640 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
13650 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
13660 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
13670 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
13680 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
13690 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
136a0 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
136b0 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
136c0 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
136d0 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
136e0 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
136f0 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
13700 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
13710 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
13720 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
13730 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
13740 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
13750 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
13760 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
13770 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
13780 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
13790 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
137a0 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
137b0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
137c0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
137d0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
137e0 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
137f0 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
13800 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
13810 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
13820 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
13830 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
13840 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
13850 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
13860 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
13870 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
13880 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
13890 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
138a0 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
138b0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
138c0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
138d0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
138e0 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
138f0 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
13900 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
13910 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
13920 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
13930 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
13940 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
13950 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
13960 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
13970 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
13980 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
13990 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
139a0 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
139b0 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
139c0 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
139d0 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
139e0 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
139f0 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
13a00 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
13a10 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
13a20 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
13a30 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
13a40 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
13a50 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
13a60 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
13a70 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
13a80 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
13a90 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
13aa0 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
13ab0 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
13ac0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
13ad0 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
13ae0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
13af0 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
13b00 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
13b10 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
13b20 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
13b30 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
13b40 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
13b50 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
13b60 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
13b70 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
13b80 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
13b90 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
13ba0 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
13bb0 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
13bc0 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
13bd0 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
13be0 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
13bf0 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
13c00 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
13c10 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
13c20 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
13c30 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
13c40 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
13c50 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
13c60 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
13c70 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
13c80 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
13c90 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
13ca0 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
13cb0 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
13cc0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
13cd0 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
13ce0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
13cf0 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
13d00 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
13d10 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
13d20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
13d30 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
13d40 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
13d50 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
13d60 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
13d70 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
13d80 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
13d90 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
13da0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
13db0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
13dc0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
13dd0 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
13de0 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
13df0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
13e00 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
13e10 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
13e20 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
13e30 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
13e40 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
13e50 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
13e60 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
13e70 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
13e80 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
13e90 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
13ea0 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
13eb0 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
13ec0 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
13ed0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
13ee0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
13ef0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
13f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
13f10 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
13f20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
13f30 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
13f40 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
13f50 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
13f60 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
13f70 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
13f80 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
13f90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13fa0 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
13fb0 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
13fc0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
13fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13fe0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
13ff0 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
14000 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
14010 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14020 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
14030 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
14040 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
14050 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
14060 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
14070 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
14080 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
14090 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
140a0 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
140b0 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
140c0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
140d0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
140e0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
140f0 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
14100 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
14110 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
14120 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
14130 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
14140 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
14150 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
14160 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
14170 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
14180 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
14190 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
141a0 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
141b0 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
141c0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
141d0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
141e0 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
141f0 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
14200 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
14210 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
14220 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
14230 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
14240 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14250 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
14260 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
14270 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
14280 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
14290 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
142a0 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
142b0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
142c0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
142d0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
142e0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
142f0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
14300 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
14310 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
14320 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
14330 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
14340 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
14350 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
14360 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
14370 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
14380 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
14390 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
143a0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
143b0 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
143c0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
143d0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
143e0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
143f0 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
14400 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
14410 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14420 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
14430 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
14440 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
14450 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
14460 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
14470 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
14480 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
14490 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
144a0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
144b0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
144c0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
144d0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
144e0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
144f0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
14500 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
14510 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
14520 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
14530 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
14540 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
14550 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
14560 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
14570 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
14580 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
14590 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
145a0 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
145b0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
145c0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
145d0 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
145e0 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
145f0 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
14600 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
14610 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
14620 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
14630 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
14640 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
14650 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
14660 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
14670 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
14680 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
14690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
146a0 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
146b0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
146c0 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
146d0 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
146e0 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
146f0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
14700 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
14710 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
14720 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
14730 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
14740 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
14750 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
14760 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
14770 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
14780 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
14790 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
147a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
147b0 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
147c0 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
147d0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
147e0 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
147f0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
14800 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
14810 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
14820 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
14830 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
14840 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
14850 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
14860 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
14870 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
14880 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
14890 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
148a0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
148b0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
148c0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
148d0 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
148e0 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
148f0 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
14900 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
14910 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
14920 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
14930 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
14940 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
14950 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
14960 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
14970 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
14980 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
14990 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
149a0 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
149b0 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
149c0 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
149d0 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
149e0 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
149f0 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
14a00 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
14a10 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
14a20 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
14a30 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
14a40 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
14a50 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
14a60 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
14a70 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
14a80 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
14a90 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
14aa0 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
14ab0 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
14ac0 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
14ad0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
14ae0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
14af0 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
14b00 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
14b10 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
14b20 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
14b30 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
14b40 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
14b50 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
14b60 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
14b70 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
14b80 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
14b90 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
14ba0 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
14bb0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
14bc0 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
14bd0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
14be0 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
14bf0 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
14c00 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
14c10 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
14c20 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
14c30 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
14c40 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
14c50 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
14c60 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
14c70 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
14c80 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
14c90 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
14ca0 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
14cb0 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
14cc0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
14cd0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
14ce0 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
14cf0 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
14d00 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
14d10 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
14d20 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
14d30 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
14d40 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
14d50 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
14d60 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
14d70 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
14d80 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
14db0 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
14dc0 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
14dd0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
14de0 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
14df0 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
14e00 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
14e10 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
14e20 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
14e50 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
14e60 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
14e70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
14e80 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
14e90 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
14ea0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
14eb0 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
14ec0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
14ed0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
14ee0 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
14ef0 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
14f00 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
14f10 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
14f20 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
14f30 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
14f40 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
14f50 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
14f60 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
14f70 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
14f80 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
14f90 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
14fa0 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
14fb0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
14fc0 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
14fd0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
14fe0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
14ff0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15000 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
15010 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
15020 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
15030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15040 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
15050 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
15060 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
15070 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
15080 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
15090 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
150a0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
150b0 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
150c0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
150d0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
150e0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
150f0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
15100 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
15110 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
15120 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
15130 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
15140 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
15150 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15160 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
15170 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
15180 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
15190 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
151a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
151b0 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
151c0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
151d0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
151e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
151f0 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
15200 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
15210 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
15240 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
15250 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
15260 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
15290 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
152a0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
152b0 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
152c0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
152d0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
152e0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
152f0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
15300 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
15310 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15320 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
15330 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15340 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15350 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
15360 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
15370 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
15380 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
15390 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
153a0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
153b0 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
153c0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
153d0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
153e0 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
153f0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
15400 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
15410 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
15420 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15430 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
15440 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
15450 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
15460 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
15470 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
15480 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
15490 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
154a0 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
154b0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
154c0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
154d0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
154e0 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
154f0 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
15500 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
15510 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
15520 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
15530 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
15540 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
15550 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
15560 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
15570 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
15580 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
15590 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
155a0 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
155b0 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
155c0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
155d0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
155e0 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
155f0 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
15600 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
15610 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
15620 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
15630 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
15640 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
15650 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
15660 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
15670 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
15680 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
15690 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
156a0 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
156b0 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
156c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
156d0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
156e0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
156f0 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
15700 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
15710 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
15720 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
15730 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
15740 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
15750 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
15760 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
15770 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
15780 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
15790 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
157a0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
157b0 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
157c0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
157d0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
157e0 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
157f0 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
15800 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
15810 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
15820 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
15830 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
15840 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
15850 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
15860 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
15870 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
15880 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
15890 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
158a0 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
158b0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
158c0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
158d0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
158e0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
158f0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
15900 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
15910 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
15920 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
15930 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
15940 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
15950 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15960 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
15970 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
15980 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
15990 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
159a0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
159b0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
159c0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
159d0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
159e0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
159f0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
15a00 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
15a10 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
15a20 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
15a30 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
15a40 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
15a50 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
15a60 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15a70 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
15a80 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15a90 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
15aa0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
15ab0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
15ac0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
15ad0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
15ae0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
15af0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
15b00 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
15b10 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
15b20 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
15b30 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
15b40 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
15b50 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
15b60 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
15b70 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
15b80 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
15b90 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
15ba0 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
15bb0 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
15bc0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
15bd0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
15be0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
15bf0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
15c00 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
15c10 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
15c20 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
15c30 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
15c40 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
15c50 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
15c60 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
15c70 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
15c80 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
15c90 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
15ca0 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
15cb0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
15cc0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
15cd0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
15ce0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
15cf0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
15d00 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
15d10 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
15d20 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
15d30 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
15d40 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
15d50 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
15d60 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
15d70 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
15d80 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
15d90 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
15da0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
15db0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
15dc0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
15dd0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
15de0 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
15df0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
15e00 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
15e10 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
15e20 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
15e30 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
15e40 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
15e50 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
15e60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
15e70 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
15e80 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
15e90 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
15ea0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
15eb0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
15ec0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
15ed0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
15ee0 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
15ef0 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
15f00 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
15f10 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
15f20 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
15f30 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
15f40 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
15f50 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
15f60 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
15f70 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
15f80 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
15f90 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
15fa0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
15fb0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
15fc0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
15fd0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
15fe0 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
15ff0 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
16000 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
16010 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
16020 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
16030 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
16040 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16050 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
16060 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
16070 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
16080 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
16090 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
160a0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
160b0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
160c0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
160d0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
160e0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
160f0 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
16100 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
16110 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
16120 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
16130 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
16140 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
16150 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
16160 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
16170 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
16180 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
16190 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
161a0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
161b0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
161c0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
161d0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
161e0 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
161f0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
16200 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
16210 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
16220 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
16230 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
16240 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
16250 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
16260 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
16270 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
16280 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
16290 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
162a0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
162b0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
162c0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
162d0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
162e0 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
162f0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
16300 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
16310 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
16320 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
16330 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
16340 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16350 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
16360 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
16370 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16390 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
163a0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
163b0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
163c0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
163d0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
163e0 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
163f0 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
16400 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
16410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16420 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
16430 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
16440 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
16450 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
16460 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
16470 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
16480 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
16490 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
164a0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
164b0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
164c0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
164d0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
164e0 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
164f0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
16500 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
16510 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
16520 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
16530 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
16540 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
16550 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
16560 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
16570 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
16580 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
16590 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
165a0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
165b0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
165c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
165d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
165e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
165f0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
16600 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
16610 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
16620 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
16630 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
16640 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
16650 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
16660 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
16670 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
16680 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
16690 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
166a0 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
166b0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
166c0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
166d0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
166e0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
166f0 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
16700 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
16710 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
16720 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
16730 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
16740 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
16750 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
16760 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
16770 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
16780 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
16790 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
167a0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
167b0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
167c0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
167d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
167e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
167f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
16810 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
16820 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
16830 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
16840 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
16850 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
16860 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
16870 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
16880 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
16890 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
168a0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
168b0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
168c0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
168d0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
168e0 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
168f0 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
16920 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
16930 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16950 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
16960 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
16970 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20  likelihood */.  
16980 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
16990 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
169a0 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
169b0 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
169c0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169d0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
169e0 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
169f0 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
16a00 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69  ys >= 1). */.  i
16a10 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
16a20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
16a30 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
16a40 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
16a50 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
16a60 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
16a70 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
16a80 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
16a90 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
16aa0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16ac0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
16ad0 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
16ae0 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
16b10 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
16b20 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
16b50 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
16b60 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
16b70 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
16b80 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
16b90 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
16ba0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
16bb0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16bc0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16bd0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
16be0 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
16bf0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
16c00 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
16c10 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
16c20 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
16c30 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
16c40 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
16c50 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
16c60 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
16c70 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
16c80 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
16c90 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
16ca0 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
16cb0 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
16cc0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
16cd0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
16ce0 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
16cf0 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
16d00 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
16d10 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
16d20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72  */.#define EP_Er
16d30 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38  ror     0x000008
16d40 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63   /* Expression c
16d50 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
16d60 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ore errors */.#d
16d70 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
16d80 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
16d90 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16da0 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
16db0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
16dc0 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
16dd0 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
16de0 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
16df0 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
16e00 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
16e10 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
16e20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
16e30 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
16e40 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
16e50 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
16e60 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
16e70 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
16e80 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
16e90 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
16ea0 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
16eb0 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
16ec0 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
16ed0 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
16ee0 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
16ef0 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
16f00 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
16f10 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
16f20 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
16f30 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
16f40 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
16f50 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
16f60 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
16f70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
16f80 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
16f90 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
16fa0 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
16fb0 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
16fc0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
16fd0 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
16fe0 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
16ff0 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
17000 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
17010 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
17020 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
17030 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
17040 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
17050 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
17060 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
17070 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
17080 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
17090 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
170a0 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
170b0 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
170c0 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
170d0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
170e0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
170f0 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
17100 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
17110 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
17120 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
17130 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
17140 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
17150 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
17160 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
17170 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
17180 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
17190 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
171a0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
171b0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
171c0 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
171d0 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
171e0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
171f0 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
17200 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17210 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
17220 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
17230 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
17240 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
17250 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
17260 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
17270 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
17280 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
17290 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
172a0 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
172b0 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
172c0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
172d0 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
172e0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62  n */../*.** Comb
172f0 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20  inations of two 
17300 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61  or more EP_* fla
17310 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  gs.*/.#define EP
17320 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
17330 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
17340 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65  ry) /* Propagate
17350 20 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74   these bits up t
17360 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ree */../*.** Th
17370 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
17380 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
17390 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
173a0 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  ts in the.** Exp
173b0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
173c0 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
173d0 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
173e0 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
173f0 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
17400 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
17410 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
17420 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
17430 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
17440 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
17450 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
17460 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
17470 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
17480 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
17490 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
174a0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
174b0 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
174c0 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
174d0 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
174e0 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
174f0 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
17500 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
17510 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
17520 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
17530 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
17540 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
17550 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
17560 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
17570 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
17580 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
17590 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
175a0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
175b0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
175c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
175d0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
175e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
175f0 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
17600 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
17610 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
17620 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
17630 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
17640 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
17650 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
17660 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
17670 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
17680 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
17690 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
176a0 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
176b0 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
176c0 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
176d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
176e0 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
176f0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
17700 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
17710 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
17720 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
17730 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
17740 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
17750 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
17760 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
17770 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
17780 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
17790 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
177a0 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
177b0 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
177c0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
177d0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
177e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
177f0 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
17800 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
17810 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
17820 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
17830 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
17840 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
17850 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
17860 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
17870 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
17880 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
17890 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
178a0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
178b0 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
178c0 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
178d0 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
178e0 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
178f0 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
17900 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
17910 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
17920 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
17930 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
17940 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
17950 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
17960 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
17970 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
17980 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
17990 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
179a0 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
179b0 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
179c0 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
179d0 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
179e0 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
179f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17a00 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
17a10 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
17a20 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
17a30 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
17a40 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
17a50 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
17a60 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
17a70 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
17a80 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
17a90 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
17aa0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
17ab0 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
17ac0 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
17ad0 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
17ae0 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
17af0 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
17b00 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
17b10 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
17b20 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
17b30 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
17b40 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
17b50 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
17b60 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
17b70 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
17b80 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
17b90 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
17ba0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
17bb0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17bc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
17bd0 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
17be0 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
17bf0 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
17c00 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
17c10 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
17c20 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
17c30 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
17c40 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
17c50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
17c60 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
17c70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17c80 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
17c90 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
17ca0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
17cb0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
17cc0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
17cd0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
17ce0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
17cf0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
17d00 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
17d10 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
17d20 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
17d30 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
17d40 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
17d50 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
17d60 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
17d70 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
17d80 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
17d90 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
17da0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
17db0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
17dc0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
17dd0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
17de0 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
17df0 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
17e00 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
17e10 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
17e20 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
17e30 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
17e40 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
17e50 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
17e60 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
17e70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
17e80 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
17e90 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
17ea0 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
17eb0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
17ec0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
17ed0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
17ee0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
17ef0 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
17f00 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17f20 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
17f30 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
17f40 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
17f50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
17f60 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
17f70 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
17f80 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
17f90 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
17fa0 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
17fb0 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
17fc0 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
17fd0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
17fe0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
17ff0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
18000 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
18010 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
18020 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
18030 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
18040 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
18050 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
18060 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
18070 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
18080 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
18090 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
180a0 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
180b0 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
180c0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
180d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
180e0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
180f0 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
18100 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
18110 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
18120 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
18130 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
18140 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
18150 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
18160 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
18170 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
18180 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
18190 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
181a0 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
181b0 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
181c0 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
181d0 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
181e0 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
181f0 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
18200 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
18210 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
18220 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
18230 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
18240 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
18250 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
18260 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
18270 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
18280 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
18290 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
182a0 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
182b0 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
182c0 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
182d0 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
182e0 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
182f0 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
18300 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
18310 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
18320 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
18330 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
18340 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
18350 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
18360 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
18370 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
18380 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
18390 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
183a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
183b0 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
183c0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
183d0 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
183e0 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
183f0 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
18400 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
18410 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
18420 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
18430 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
18440 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
18450 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
18460 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
18470 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
18480 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
18490 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
184a0 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
184b0 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
184c0 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
184d0 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  6..*/.#ifdef SQL
184e0 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
184f0 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54  .  typedef SQLIT
18500 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42  E_BITMASK_TYPE B
18510 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20  itmask;.#else.  
18520 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
18530 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ask;.#endif../*.
18540 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
18550 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
18560 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
18570 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
18580 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
18590 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
185a0 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
185b0 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
185c0 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
185d0 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
185e0 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
185f0 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
18600 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
18610 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
18620 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20  #define ALLBITS 
18630 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d       ((Bitmask)-
18640 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  1)../*.** The fo
18650 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
18660 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
18670 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
18680 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18690 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
186a0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
186b0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
186c0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
186d0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
186e0 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
186f0 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
18700 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
18710 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
18720 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
18730 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
18740 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
18750 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
18760 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
18770 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
18780 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
18790 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
187a0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
187b0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
187c0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
187d0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
187e0 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
187f0 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
18800 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
18810 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
18820 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
18830 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
18840 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
18850 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
18860 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
18870 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
18880 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
18890 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
188a0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
188b0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
188c0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
188d0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
188e0 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
188f0 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
18900 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
18910 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
18920 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
18930 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
18940 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
18950 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
18960 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
18970 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
18980 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
18990 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
189a0 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
189b0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
189c0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
189d0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
189e0 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
189f0 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
18a00 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
18a10 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
18a20 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
18a30 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
18a40 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
18a50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18a60 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
18a70 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
18a80 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
18a90 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
18aa0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
18ab0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
18ac0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
18ad0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
18ae0 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
18af0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
18b00 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
18b10 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
18b20 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
18b30 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
18b40 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
18b50 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
18b60 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
18b70 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
18b80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
18b90 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
18ba0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
18bb0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
18bc0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
18bd0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
18be0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
18bf0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
18c00 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
18c10 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
18c20 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
18c30 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
18c40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
18c50 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
18c60 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
18c70 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
18c80 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
18c90 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
18ca0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
18cb0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
18cc0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
18cd0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
18ce0 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
18cf0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
18d00 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
18d10 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
18d20 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
18d30 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
18d40 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
18d50 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
18d60 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
18d70 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
18d80 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
18d90 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
18da0 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
18db0 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
18dc0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
18dd0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
18de0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
18df0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18e00 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
18e10 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
18e20 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
18e30 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
18e40 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
18e50 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
18e60 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
18e70 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
18e80 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
18e90 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
18ea0 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
18eb0 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
18ec0 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
18ed0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18ee0 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
18ef0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
18f00 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
18f10 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
18f20 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
18f30 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
18f40 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
18f50 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
18f60 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
18f70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18f80 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
18f90 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
18fa0 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
18fb0 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
18fc0 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
18fd0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
18fe0 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
18ff0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
19000 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
19010 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
19020 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
19030 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
19040 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
19050 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
19060 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
19070 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
19080 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
19090 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
190a0 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
190b0 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
190c0 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
190d0 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
190e0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
190f0 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
19100 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
19110 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
19120 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
19130 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
19140 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
19150 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
19160 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
19170 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
19180 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
19190 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
191a0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
191b0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
191c0 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
191d0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
191e0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
191f0 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
19200 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
19210 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
19220 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
19230 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
19240 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
19250 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
19260 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
19270 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
19280 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
19290 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
192a0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
192b0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
192c0 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
192d0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
192e0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
192f0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
19300 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
19310 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
19320 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
19330 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
19340 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
19350 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
19360 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
19370 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
19380 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
19390 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
193a0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
193b0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
193c0 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
193d0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
193e0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
193f0 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
19400 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
19410 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
19420 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
19430 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
19440 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
19450 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
19460 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
19470 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
19480 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  member..*/.#defi
19490 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
194a0 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
194b0 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
194c0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
194d0 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
194e0 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
194f0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
19500 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
19510 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
19520 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
19530 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
19540 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
19550 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
19560 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
19570 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
19580 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
19590 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
195a0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
195b0 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
195c0 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f  S_OK    0x0008 /
195d0 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
195e0 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
195f0 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
19600 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43  HERE_OMIT_OPEN_C
19610 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20  LOSE  0x0010 /* 
19620 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72  Table cursors ar
19630 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a  e already open *
19640 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19650 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20  FORCE_TABLE     
19660 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f   0x0020 /* Do no
19670 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f  t use an index-o
19680 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64  nly search */.#d
19690 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54  efine WHERE_ONET
196a0 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30  ABLE_ONLY    0x0
196b0 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65  040 /* Only code
196c0 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69   the 1st table i
196d0 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64  n pTabList */.#d
196e0 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41  efine WHERE_NO_A
196f0 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30  UTOINDEX     0x0
19700 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20  080 /* Disallow 
19710 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
19720 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
19730 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
19740 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f      0x0100 /* pO
19750 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
19760 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
19770 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
19780 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
19790 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0200 /* pOrderby
197a0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
197b0 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
197c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
197d0 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
197e0 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0400 /* All out
197f0 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
19800 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
19810 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
19820 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38 30  GROUP      0x080
19830 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
19840 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
19850 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
19860 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20  HERE_REOPEN_IDX 
19870 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20        0x1000 /* 
19880 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65  Try to use OP_Re
19890 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64 65 66 69  openIdx */.#defi
198a0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
198b0 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32 30 30 30  _MULTIROW 0x2000
198c0 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
198d0 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
198e0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
198f0 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
19900 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a         0x4000 /*
19910 20 54 68 65 72 65 20 69 73 20 61 20 63 6f 6e 73   There is a cons
19920 74 61 6e 74 20 4c 49 4d 49 54 20 63 6c 61 75 73  tant LIMIT claus
19930 65 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  e */../* Allowed
19940 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
19950 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
19960 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
19970 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
19980 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
19990 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
199a0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
199b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
199c0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
199d0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
199e0 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
199f0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
19a00 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
19a10 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
19a20 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
19a30 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19a40 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
19a50 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
19a60 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
19a70 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
19a80 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
19a90 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
19aa0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
19ab0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
19ac0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
19ad0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
19ae0 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
19af0 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
19b00 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
19b10 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
19b20 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
19b30 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
19b40 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
19b50 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
19b60 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
19b70 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
19b80 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
19b90 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
19ba0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
19bb0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
19bc0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
19bd0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
19be0 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
19bf0 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
19c00 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
19c10 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
19c20 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
19c30 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
19c40 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
19c50 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
19c60 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
19c70 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
19c80 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
19c90 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
19ca0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
19cb0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
19cc0 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
19cd0 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
19ce0 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
19cf0 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
19d00 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
19d10 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
19d20 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
19d30 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
19d40 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
19d50 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
19d60 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
19d70 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
19d80 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
19d90 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
19da0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
19db0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
19dc0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
19dd0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
19de0 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
19df0 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
19e00 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
19e10 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
19e20 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
19e30 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
19e40 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
19e50 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
19e60 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
19e70 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
19e80 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
19e90 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
19ea0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
19eb0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
19ec0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
19ed0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
19ee0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
19ef0 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
19f00 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
19f10 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
19f20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
19f30 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
19f40 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
19f50 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
19f60 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
19f70 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
19f80 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
19f90 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
19fa0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
19fb0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
19fc0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
19fd0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
19fe0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
19ff0 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1a000 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1a010 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1a020 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1a030 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a040 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1a050 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1a060 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1a070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a080 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1a090 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1a0a0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1a0b0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1a0c0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1a0d0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1a0e0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1a0f0 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1a100 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1a110 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1a120 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1a130 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
1a140 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
1a150 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
1a160 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
1a170 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
1a180 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1a190 58 2e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  X..**.*/.#define
1a1a0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1a1b0 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1a1c0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1a1d0 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1a1e0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1a1f0 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  gg    0x0002  /*
1a200 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1a210 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a220 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1a230 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1a240 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1a250 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1a260 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1a270 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1a280 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1a290 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1a2a0 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1a2b0 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1a2c0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1a2d0 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
1a2e0 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  010  /* True if 
1a2f0 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
1a300 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
1a310 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1a320 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1a330 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1a340 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1a350 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1a360 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61  #define NC_MinMa
1a370 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20  xAgg 0x1000  /* 
1a380 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74  min/max aggregat
1a390 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f  es seen.  See no
1a3a0 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a  te above */../*.
1a3b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1a3c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1a3d0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1a3e0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
1a3f0 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
1a400 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
1a410 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
1a420 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
1a430 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
1a440 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
1a450 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
1a460 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
1a470 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
1a480 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
1a490 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
1a4a0 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
1a4b0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1a4c0 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
1a4d0 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
1a4e0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
1a4f0 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
1a500 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
1a510 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
1a520 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
1a530 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
1a540 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
1a550 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
1a560 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
1a570 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
1a580 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
1a590 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1a5a0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1a5b0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1a5c0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1a5d0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1a5e0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1a5f0 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1a600 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1a610 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1a620 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1a630 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1a640 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1a650 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1a660 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1a670 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a680 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1a690 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1a6a0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1a6b0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1a6c0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1a6d0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1a6e0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1a6f0 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1a700 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1a710 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1a720 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1a730 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1a740 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1a750 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1a760 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1a770 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1a780 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1a790 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1a7a0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1a7b0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1a7c0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1a7d0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1a7e0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1a7f0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1a800 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1a810 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1a820 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1a850 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1a860 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1a870 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1a880 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1a890 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1a8a0 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1a8b0 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1a8c0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1a8d0 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1a8e0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1a8f0 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1a900 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1a910 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1a920 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1a930 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ers */.#if SELEC
1a940 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1a950 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31   char zSelName[1
1a960 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f  2];     /* Symbo
1a970 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73  lic name of this
1a980 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20   SELECT use for 
1a990 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e  debugging */.#en
1a9a0 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70  dif.  int addrOp
1a9b0 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
1a9c0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
1a9d0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
1a9e0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
1a9f0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
1aa00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
1aa10 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1aa20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1aa30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1aa40 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
1aa50 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
1aa60 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
1aa70 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
1aa80 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
1aa90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1aaa0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
1aab0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1aac0 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
1aad0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1aae0 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
1aaf0 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
1ab00 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
1ab10 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
1ab20 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
1ab30 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
1ab40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1ab50 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
1ab60 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
1ab70 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
1ab80 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
1ab90 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
1aba0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1abb0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
1abc0 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
1abd0 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
1abe0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1abf0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1ac00 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1ac10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1ac20 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1ac30 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1ac40 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d  t. Or NULL. */.}
1ac50 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1ac60 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
1ac70 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
1ac80 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
1ac90 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
1aca0 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64  ect Flag"..*/.#d
1acb0 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
1acc0 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20  t       0x00001 
1acd0 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
1ace0 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
1acf0 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
1ad00 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
1ad10 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
1ad20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
1ad30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1ad40 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30  solved       0x0
1ad50 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
1ad60 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
1ad70 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
1ad80 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
1ad90 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a       0x00008  /*
1ada0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1adb0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1adc0 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1add0 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1ade0 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  10  /* Uses the 
1adf0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1ae00 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1ae10 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1ae20 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 73 71    0x00020  /* sq
1ae30 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1ae40 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1ae50 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1ae60 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1ae70 30 78 30 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d  0x00040  /* FROM
1ae80 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1ae90 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1aea0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1aeb0 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1aec0 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0080  /* Part of
1aed0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1aee0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1aef0 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1af00 78 30 30 31 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00100  /* Synth
1af10 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1af20 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1af30 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1af40 75 65 20 20 20 20 20 30 78 30 30 32 30 30 20 20  ue     0x00200  
1af50 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1af60 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1af70 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1af80 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1af90 6d 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f  m     0x00400  /
1afa0 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1afb0 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1afc0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1afd0 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1afe0 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 4e     0x00800  /* N
1aff0 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1b000 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1b010 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1b020 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1b030 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1b040 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1b050 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1b060 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1b070 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1b080 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1b090 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1b0a0 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1b0b0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1b0c0 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1b0d0 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1b0e0 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1b0f0 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1b100 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1b110 65 72 74 65 64 20 20 20 20 20 20 30 78 30 38 30  erted      0x080
1b120 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1b130 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1b140 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1b150 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1b160 65 48 69 64 64 65 6e 20 20 30 78 31 30 30 30 30  eHidden  0x10000
1b170 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1b180 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1b190 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  utput */.../*.**
1b1a0 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1b1b0 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1b1c0 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1b1d0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1b1e0 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1b1f0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1b200 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1b210 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1b220 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1b230 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1b240 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1b250 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1b260 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1b270 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1b280 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1b290 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1b2a0 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1b2b0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1b2c0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1b2d0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1b2e0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1b2f0 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1b300 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1b310 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1b320 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1b330 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1b340 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1b350 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1b380 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1b390 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1b3a0 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1b3b0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1b3c0 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1b3f0 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1b400 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1b410 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1b420 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1b430 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1b440 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1b450 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1b460 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1b470 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1b480 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1b490 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1b4a0 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1b4b0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1b4c0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1b4d0 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1b4e0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1b4f0 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1b500 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1b530 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1b540 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1b550 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1b560 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1b570 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1b580 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1b590 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b5a0 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1b5b0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1b5c0 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1b5d0 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1b5f0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1b600 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1b610 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1b620 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b630 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1b640 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1b650 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1b660 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1b670 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1b680 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1b690 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1b6a0 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1b6b0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1b6c0 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1b6d0 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1b6e0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1b6f0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1b720 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1b730 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1b740 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1b750 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1b760 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1b770 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1b780 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1b790 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1b7a0 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1b7b0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1b7c0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1b7d0 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b7f0 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1b800 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1b810 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1b840 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1b850 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1b860 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1b870 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1b880 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1b890 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1b8a0 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8c0 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1b8d0 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1b8e0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1b8f0 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1b900 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1b910 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1b940 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1b950 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1b960 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1b980 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1b990 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1b9a0 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1b9b0 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1b9d0 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1b9e0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1b9f0 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1ba00 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1ba10 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1ba20 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1ba30 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1ba40 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1ba50 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1ba60 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1ba70 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1ba80 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1ba90 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1baa0 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1bab0 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1bac0 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bae0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1baf0 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1bb00 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1bb30 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1bb40 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1bb50 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1bb60 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1bb70 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1bb80 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1bb90 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1bba0 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1bbb0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1bbc0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1bbf0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1bc00 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1bc10 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1bc20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1bc30 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1bc40 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1bc50 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1bc60 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1bc70 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1bc80 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1bc90 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1bca0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1bcb0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1bcc0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1bcd0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1bce0 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1bcf0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1bd00 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1bd10 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1bd20 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1bd30 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1bd40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1bd50 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1bd60 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1bd70 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1bd80 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1bd90 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1bda0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1bdb0 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1bdd0 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1bde0 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1bdf0 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1be00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1be10 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1be20 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1be30 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1be40 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1be50 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1be60 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1be70 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1be80 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1be90 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1bea0 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1beb0 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1bec0 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1bed0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1bee0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1bef0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1bf00 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1bf10 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1bf20 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1bf30 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1bf40 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1bf50 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1bf60 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1bf70 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1bf80 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1bf90 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1bfa0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1bfb0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1bfc0 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1bfd0 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1bfe0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1bff0 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1c000 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1c010 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1c020 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1c030 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1c040 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1c050 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1c060 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1c070 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1c080 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1c090 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1c0a0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1c0b0 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1c0c0 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1c0d0 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1c0e0 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1c0f0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1c100 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1c110 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1c120 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1c130 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1c140 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1c150 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1c160 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1c170 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1c180 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1c190 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1c1a0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1c1b0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1c1c0 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1c1d0 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1c1e0 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1c1f0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1c200 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1c210 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1c220 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1c230 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1c240 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1c250 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1c260 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1c270 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1c280 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1c290 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1c2a0 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1c2b0 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1c2c0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1c2d0 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1c2e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1c2f0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1c300 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1c310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1c320 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1c330 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1c340 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1c350 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
1c360 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66  t;        /* Aff
1c370 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1c380 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1c390 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1c3a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1c3b0 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1c3c0 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1c3d0 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1c3e0 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1c3f0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1c400 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1c410 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1c420 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1c430 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c440 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1c450 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45  allocated */.  E
1c460 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1c470 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1c480 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1c490 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1c4a0 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1c4b0 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1c4c0 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1c4d0 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1c4e0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1c4f0 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1c500 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1c510 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1c520 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1c530 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1c540 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1c550 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1c560 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1c570 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1c580 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1c590 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1c5a0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1c5b0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1c5c0 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1c5d0 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1c5e0 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1c5f0 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1c600 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1c610 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1c620 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1c630 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1c640 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1c650 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1c660 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1c670 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1c680 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1c690 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1c6a0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1c6b0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1c6c0 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1c6d0 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1c6e0 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1c6f0 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1c700 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1c710 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1c720 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1c730 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c750 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1c760 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1c770 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1c780 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1c790 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1c7a0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1c7b0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1c7c0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1c7d0 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1c7e0 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1c7f0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1c800 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1c810 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1c820 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1c830 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1c840 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1c850 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1c860 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1c870 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1c880 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1c890 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1c8a0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1c8b0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1c8c0 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1c8d0 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1c8e0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1c8f0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1c900 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1c910 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1c920 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1c930 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1c940 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1c950 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1c960 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1c970 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1c980 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1c990 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1c9a0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1c9b0 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1c9c0 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1c9d0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1c9e0 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1c9f0 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1ca00 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1ca10 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1ca20 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1ca30 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1ca40 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1ca50 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1ca60 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1ca70 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1ca80 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1ca90 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1caa0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1cab0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1cac0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1cad0 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1cae0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1caf0 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1cb00 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1cb10 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1cb20 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
1cb30 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1cb40 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1cb50 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1cb60 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1cb70 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1cb80 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1cb90 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1cba0 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1cbb0 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1cbc0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1cbd0 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1cbe0 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1cbf0 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1cc00 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1cc10 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1cc20 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1cc30 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1cc40 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1cc50 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1cc60 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1cc70 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1cc80 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1cc90 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1cca0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1ccb0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1ccc0 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1ccd0 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1cce0 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1ccf0 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1cd00 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1cd10 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1cd20 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1cd30 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1cd40 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1cd50 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1cd60 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1cd70 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1cd80 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1cd90 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1cda0 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1cdb0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1cdc0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1cdd0 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1cde0 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1cdf0 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1ce00 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1ce10 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1ce20 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ce30 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1ce40 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1ce50 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1ce60 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1ce70 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1ce80 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1ce90 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1cea0 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1ceb0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1cec0 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1ced0 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1cee0 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1cef0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1cf00 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1cf10 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1cf20 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1cf30 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1cf40 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1cf50 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1cf60 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1cf70 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1cf80 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1cf90 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1cfa0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1cfb0 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1cfc0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1cfd0 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1cfe0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1cff0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1d000 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1d010 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1d020 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1d030 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1d040 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1d050 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1d060 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1d070 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1d080 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1d090 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1d0a0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1d0b0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1d0c0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1d0d0 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1d0e0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1d0f0 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1d100 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1d110 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1d120 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1d130 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1d140 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1d150 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1d160 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1d170 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1d180 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1d190 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1d1a0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1d1b0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1d1c0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1d1d0 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
1d1e0 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1d1f0 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1d200 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1d210 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1d220 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1d230 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1d240 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1d250 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1d260 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1d270 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1d280 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1d290 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1d2a0 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1d2b0 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1d2c0 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1d2d0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1d2e0 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1d2f0 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1d300 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1d310 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1d320 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1d330 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1d340 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1d350 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1d360 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1d370 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d390 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1d3a0 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1d3b0 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1d3c0 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1d3d0 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1d3e0 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1d3f0 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1d400 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1d410 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1d420 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1d430 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1d440 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1d450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d460 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1d470 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1d480 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1d490 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1d4a0 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1d4b0 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1d4c0 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1d4d0 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1d4e0 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1d4f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1d500 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1d510 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1d520 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1d530 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1d540 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1d550 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1d560 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1d570 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1d580 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1d590 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1d5a0 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1d5b0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1d5c0 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1d5d0 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1d5e0 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1d5f0 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1d600 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
1d610 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
1d620 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
1d630 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
1d640 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 61 54  bled */.  int aT
1d650 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
1d660 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1d670 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1d680 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
1d690 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
1d6a0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1d6b0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1d6c0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1d6d0 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
1d6e0 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1d6f0 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
1d700 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1d710 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1d720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d730 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
1d740 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
1d750 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1d760 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
1d770 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
1d780 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
1d790 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
1d7a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d7b0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1d7c0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1d7d0 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
1d7e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d7f0 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
1d800 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1d810 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
1d820 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
1d830 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
1d840 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1d850 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1d860 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1d870 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1d880 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1d890 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63  .  int szOpAlloc
1d8a0 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73  ;       /* Bytes
1d8b0 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
1d8c0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1d8d0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1d8e0 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1d8f0 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1d900 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1d910 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1d920 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1d930 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1d940 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1d950 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1d960 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1d970 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
1d980 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
1d990 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77  le of an index w
1d9a0 68 6f 73 65 20 65 78 70 72 73 20 61 72 65 20 62  hose exprs are b
1d9b0 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20  eing coded */.  
1d9c0 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
1d9d0 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
1d9e0 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
1d9f0 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
1da00 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
1da10 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
1da20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1da30 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
1da40 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
1da50 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  u values */.  in
1da60 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
1da70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1da80 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
1da90 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
1daa0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
1dab0 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
1dac0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  s */.  struct yC
1dad0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1dae0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1daf0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1db00 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1db10 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1db20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1db30 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1db40 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1db50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1db60 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1db70 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1db80 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1db90 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1dba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1dbb0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1dbc0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1dbd0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1dbe0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
1dbf0 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
1dc00 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
1dc10 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
1dc20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
1dc30 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
1dc40 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
1dc50 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
1dc60 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
1dc70 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
1dc80 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
1dc90 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
1dca0 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ry */.  ExprList
1dcb0 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
1dcc0 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
1dcd0 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ions */.  Token 
1dce0 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f  constraintName;/
1dcf0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1dd00 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74  nstraint current
1dd10 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20  ly being parsed 
1dd20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
1dd30 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
1dd40 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
1dd50 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
1dd60 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
1dd70 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
1dd80 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
1dd90 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
1dda0 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
1ddb0 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
1ddc0 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
1ddd0 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
1dde0 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
1ddf0 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
1de00 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
1de10 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1de20 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
1de30 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
1de40 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
1de50 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
1de60 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1de70 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1de80 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
1de90 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
1dea0 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
1deb0 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
1dec0 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
1ded0 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
1dee0 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
1def0 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20  E_ENABLED.  int 
1df00 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  nSelect;        
1df10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45   /* Number of SE
1df20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1df30 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  seen */.  int nS
1df40 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f  electIndent;   /
1df50 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64  * How far to ind
1df60 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28  ent SELECTTRACE(
1df70 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  ) output */.#end
1df80 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
1df90 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
1dfa0 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
1dfb0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
1dfc0 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
1dfd0 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
1dfe0 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
1dff0 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
1e000 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
1e010 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
1e020 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
1e030 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
1e040 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
1e050 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
1e060 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
1e070 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e  ters */..  /* In
1e080 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77  formation used w
1e090 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67  hile coding trig
1e0a0 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f  ger programs. */
1e0b0 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
1e0c0 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
1e0d0 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
1e0e0 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
1e0f0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
1e100 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
1e110 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
1e120 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1e130 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
1e140 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
1e150 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
1e160 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1e170 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
1e180 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  BLE */.  u32 nQu
1e190 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1e1a0 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1e1b0 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1e1c0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1e1d0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1e1e0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1e1f0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1e200 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1e210 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1e220 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1e230 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e240 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1e250 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1e260 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1e270 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1e280 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1e290 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1e2a0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1e2b0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1e2c0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1e2d0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1e2e0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1e2f0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1e300 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1e310 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1e320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1e360 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1e370 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1e380 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1e390 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1e3a0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1e3b0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1e3c0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1e3d0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1e3e0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1e3f0 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1e400 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1e410 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1e420 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1e430 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1e440 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1e450 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1e460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e4a0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e 56 61 72  ******/..  ynVar
1e4b0 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
1e4c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e4d0 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1e4e0 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1e4f0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1e500 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1e510 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e520 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1e530 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1e540 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1e550 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1e560 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1e570 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1e580 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
1e590 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1e5a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1e5b0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1e5c0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1e5d0 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1e5e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1e5f0 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1e600 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1e610 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1e620 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1e630 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1e640 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1e650 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1e660 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1e670 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1e680 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1e690 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1e6a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e6b0 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1e6c0 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1e6d0 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e6f0 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1e700 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1e710 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1e720 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e730 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1e740 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1e750 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1e760 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1e770 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1e780 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1e790 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1e7a0 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1e7b0 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1e7c0 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1e7d0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1e7e0 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1e7f0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1e800 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1e810 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1e820 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1e830 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1e840 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1e850 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1e860 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1e870 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1e880 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1e890 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1e8a0 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1e8b0 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1e8c0 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1e8d0 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1e8e0 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1e8f0 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1e900 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1e910 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1e920 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1e930 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1e940 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1e950 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1e960 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1e970 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1e980 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1e990 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1e9a0 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1e9b0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1e9c0 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1e9d0 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1e9e0 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1e9f0 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1ea00 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1ea10 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1ea20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1ea30 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1ea40 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ea60 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1ea70 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1ea80 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1ea90 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1eaa0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1eab0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1eac0 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1ead0 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1eae0 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1eaf0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1eb00 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1eb10 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1eb20 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1eb30 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1eb40 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1eb50 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1eb60 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1eb70 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1eb80 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1eb90 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1eba0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
1ebb0 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
1ebc0 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
1ebd0 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
1ebe0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1ebf0 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  parse */.};../*.
1ec00 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1ec10 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1ec20 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1ec30 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1ec40 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1ec50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1ec60 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1ec70 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1ec80 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1ec90 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1eca0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1ecb0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1ecc0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1ecd0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1ece0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1ecf0 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1ed00 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1ed10 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1ed20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1ed30 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1ed40 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1ed50 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1ed60 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1ed70 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1ed80 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1ed90 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1eda0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1edb0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1edc0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1edd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1ede0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1edf0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1ee00 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1ee10 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1ee20 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64  s opcodes..*/.#d
1ee30 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1ee40 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1ee50 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a     /* OP_Insert:
1ee60 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1ee70 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20  b->nChange */.  
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eea0 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20     /* Also used 
1eeb0 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f  in P2 (not P5) o
1eec0 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23  f OP_Delete */.#
1eed0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
1eee0 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
1eef0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1ef00 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
1ef10 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
1ef20 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1ef30 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1ef40 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1ef50 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1ef60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ef70 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1ef80 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1ef90 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1efa0 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1efb0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1efc0 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1efd0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1efe0 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1eff0 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1f000 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1f010 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1f020 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1f030 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1f040 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
1f050 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
1f060 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
1f070 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1f080 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
1f090 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1f0a0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
1f0b0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
1f0c0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1f0d0 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
1f0e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
1f0f0 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
1f100 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
1f110 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
1f120 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
1f130 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
1f140 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
1f150 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
1f160 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
1f170 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
1f180 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  ine OPFLAG_FORDE
1f190 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20  LETE     0x08   
1f1a0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75   /* OP_Open shou
1f1b0 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52  ld use BTREE_FOR
1f1c0 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
1f1d0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
1f1e0 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
1f1f0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
1f200 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
1f210 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
1f220 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
1f230 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1f240 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
1f250 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
1f260 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
1f270 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
1f280 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
1f290 44 65 6c 65 74 65 3a 20 6b 65 65 70 20 63 75 72  Delete: keep cur
1f2a0 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20 2a 2f 0a  sor position */.
1f2b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
1f2c0 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
1f2d0 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
1f2e0 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
1f2f0 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20  LETE op */../*. 
1f300 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
1f310 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
1f320 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
1f330 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
1f340 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
1f350 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
1f360 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
1f370 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
1f380 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
1f390 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
1f3a0 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
1f3b0 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
1f3c0 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
1f3d0 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
1f3e0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
1f3f0 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
1f400 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
1f410 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
1f420 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
1f430 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
1f440 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
1f450 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
1f460 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
1f470 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
1f480 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
1f490 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
1f4a0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
1f4b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1f4c0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1f4d0 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
1f4e0 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
1f4f0 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
1f500 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
1f510 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
1f520 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
1f530 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
1f540 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
1f550 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1f560 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
1f570 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
1f580 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
1f590 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
1f5a0 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
1f5b0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
1f5c0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
1f5d0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f5f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
1f600 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
1f620 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
1f630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f640 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
1f650 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
1f660 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
1f670 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1f680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1f690 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1f6a0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1f6b0 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
1f6c0 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
1f6d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1f6e0 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
1f6f0 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
1f700 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1f710 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1f720 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
1f730 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
1f740 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
1f750 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
1f760 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
1f770 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
1f780 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
1f790 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1f7c0 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
1f7d0 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
1f7e0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1f7f0 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
1f800 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1f810 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
1f820 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
1f830 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
1f840 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1f850 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
1f860 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
1f870 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
1f880 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
1f890 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
1f8a0 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
1f8b0 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
1f8c0 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
1f8d0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
1f8e0 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
1f8f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
1f900 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
1f910 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
1f920 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
1f930 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
1f940 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
1f950 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
1f960 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
1f970 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
1f980 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
1f990 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
1f9a0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
1f9b0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
1f9c0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
1f9d0 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
1f9e0 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
1f9f0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
1fa00 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
1fa10 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
1fa20 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
1fa30 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1fa40 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
1fa50 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
1fa60 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
1fa70 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
1fa80 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
1fa90 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
1faa0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1fab0 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
1fac0 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
1fad0 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
1fae0 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
1faf0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
1fb00 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
1fb10 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
1fb20 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
1fb30 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
1fb40 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
1fb50 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
1fb60 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
1fb70 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
1fb80 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
1fb90 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
1fba0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
1fbb0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1fbc0 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1fbd0 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1fbe0 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1fbf0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1fc00 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1fc10 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1fc20 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1fc30 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1fc40 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
1fc50 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
1fc60 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
1fc70 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
1fc80 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
1fc90 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
1fca0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1fcb0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1fcc0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1fcd0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1fce0 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1fcf0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1fd00 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1fd10 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1fd20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1fd30 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1fd40 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
1fd50 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
1fd60 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1fd70 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
1fd80 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1fd90 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1fda0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
1fdb0 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
1fdc0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1fdd0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1fde0 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
1fdf0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
1fe00 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1fe10 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
1fe20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1fe30 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
1fe40 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
1fe50 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
1fe60 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1fe70 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
1fe80 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
1fe90 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
1fea0 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
1feb0 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
1fec0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
1fed0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1fee0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1fef0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
1ff00 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
1ff10 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1ff20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1ff30 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
1ff40 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1ff50 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1ff60 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1ff70 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
1ff80 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
1ff90 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
1ffa0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
1ffb0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1ffc0 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
1ffd0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1ffe0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1fff0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
20000 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
20010 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
20020 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
20030 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
20040 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
20050 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
20060 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
20070 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
20080 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
20090 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
200a0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
200b0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
200c0 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
200e0 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
200f0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
20100 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
20110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
20120 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
20130 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
20140 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
20150 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
20160 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
20170 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
20180 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
20190 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
201a0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
201b0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
201c0 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
201d0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
201e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
201f0 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
20200 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
20210 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
20220 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
20230 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
20240 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
20250 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
20260 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
20270 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
20280 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
20290 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
202a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
202b0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
202c0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
202d0 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
202e0 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
202f0 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
20300 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
20310 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
20320 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
20330 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
20340 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
20350 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
20360 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
20370 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
20380 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
20390 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
203a0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
203b0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
203c0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
203d0 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
203e0 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
203f0 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
20400 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
20410 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
20420 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a  s.** explicit..*
20430 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
20440 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
20450 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
20460 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
20470 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
20480 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
20490 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
204a0 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
204b0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
204c0 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
204d0 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
204e0 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
204f0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
20500 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
20510 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
20520 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
20530 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
20540 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
20550 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
20560 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
20570 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
20580 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
20590 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
205a0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
205b0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
205c0 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
205d0 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
205e0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
205f0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
20600 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
20610 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
20620 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
20630 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
20640 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
20650 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
20660 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
20670 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
20680 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
20690 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
206a0 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
206b0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
206c0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
206d0 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
206e0 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
206f0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
20700 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
20710 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
20720 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
20730 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
20740 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
20750 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
20760 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
20770 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
20780 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
20790 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
207a0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32   so far */.  u32
207b0 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
207c0 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
207d0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
207e0 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32  n zText */.  u32
207f0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
20800 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
20810 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  owed allocation.
20820 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f    0 for no mallo
20830 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20  c usage */.  u8 
20840 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
20850 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
20860 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
20870 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
20880 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
20890 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
208a0 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
208b0 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
208c0 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
208d0 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
208e0 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e  TOOBIG  2.#defin
208f0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
20900 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
20910 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
20920 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
20930 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
20940 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
20950 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
20960 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
20970 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
20980 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
20990 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
209a0 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
209b0 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
209c0 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
209d0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
209e0 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
209f0 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
20a00 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
20a10 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
20a20 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
20a30 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
20a40 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
20a50 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
20a60 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
20a70 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
20a80 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
20a90 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
20aa0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
20ab0 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
20ac0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
20ad0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
20ae0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
20af0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
20b00 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
20b10 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
20b20 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
20b30 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
20b40 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
20b50 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
20b60 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
20b70 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
20b80 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
20b90 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
20ba0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
20bb0 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
20bc0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
20bd0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
20be0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
20bf0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
20c00 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
20c10 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
20c20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
20c30 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
20c40 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
20c50 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
20c60 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c80 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
20c90 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
20ca0 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
20cb0 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
20cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
20cd0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
20ce0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
20cf0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
20d20 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
20d30 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
20d40 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
20d50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20d60 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
20d70 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
20d80 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
20d90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20da0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
20db0 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
20dc0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
20dd0 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20df0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
20e00 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
20e10 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
20e20 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
20e30 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
20e40 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
20e50 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
20e60 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20e80 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
20e90 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
20ea0 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
20eb0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
20ec0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
20ed0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
20ee0 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74  r count */.  int
20ef0 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20   nStmtSpill;    
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f10 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73  * Stmt-journal s
20f20 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72  pill-to-disk thr
20f30 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69  eshold */.  sqli
20f40 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
20f50 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
20f60 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
20f70 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
20f80 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
20f90 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
20fa0 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
20fb0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
20fc0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
20fd0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
20fe0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
20ff0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
21000 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
21010 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
21020 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
21030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
21040 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
21050 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21070 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
21080 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
21090 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
210a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
210b0 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
210c0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
210d0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
210e0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
210f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
21100 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
21110 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
21120 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
21130 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
21140 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
21150 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
21160 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
21170 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21180 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
21190 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
211a0 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
211c0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
211d0 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
211e0 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21210 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
21220 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
21230 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21240 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
21250 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
21260 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21280 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
21290 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
212a0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
212b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
212c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
212d0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
212e0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
212f0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21310 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
21320 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
21330 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
21340 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
21350 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
21360 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
21370 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
21380 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
213b0 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
213c0 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
213d0 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
213e0 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
213f0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
21400 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
21410 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
21420 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
21430 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
21440 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
21450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21460 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
21470 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
21480 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
21490 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
214b0 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
214c0 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
214d0 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
214e0 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21500 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
21510 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
21520 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
21530 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
21540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21550 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
21560 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
21570 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
21580 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
21590 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
215a0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
215b0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
215c0 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
215f0 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
21600 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
21610 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
21620 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
21630 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
21640 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
21650 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
21660 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
21670 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
21680 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
21690 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
216a0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
216b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
216c0 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
216d0 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
216e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
216f0 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
21700 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
21710 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21720 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
21730 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
21740 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
21750 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
21760 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
21770 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
21780 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
21790 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
217a0 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
217b0 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
217c0 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
217d0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
217e0 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
217f0 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
21800 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
21810 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
21820 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
21830 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
21840 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
21850 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
21880 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
21890 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
218a0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
218b0 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78  N_TEST.  int (*x
218c0 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e  TestCallback)(in
218d0 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  t);        /* In
218e0 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33  voked by sqlite3
218f0 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65  FaultSim() */.#e
21900 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ndif.  int bLoca
21910 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
21920 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
21930 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
21940 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b  me() calls */.};
21950 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
21960 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
21970 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
21980 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
21990 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
219a0 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
219b0 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
219c0 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
219d0 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
219e0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
219f0 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
21a00 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
21a10 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
21a20 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
21a30 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
21a40 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
21a50 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
21a60 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
21a70 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
21a80 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
21a90 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
21aa0 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
21ab0 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
21ac0 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
21ad0 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
21ae0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
21af0 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
21b00 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
21b10 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
21b20 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
21b30 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
21b40 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
21b50 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
21b60 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
21b70 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
21b80 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
21b90 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
21ba0 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
21bb0 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
21bc0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
21bd0 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
21be0 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
21bf0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
21c00 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
21c10 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
21c40 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
21c50 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
21c60 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
21c70 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
21c80 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
21c90 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
21ca0 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
21cb0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
21cc0 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
21cd0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
21ce0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
21cf0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
21d00 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
21d10 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
21d20 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
21d30 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
21d40 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21d60 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
21d70 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
21d80 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21da0 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
21db0 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
21dc0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21df0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
21e00 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
21e10 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
21e20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21e30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
21e40 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
21e50 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21e80 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
21e90 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21ec0 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
21ed0 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
21ee0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
21f10 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
21f20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
21f30 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
21f40 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
21f50 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
21f60 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
21f70 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
21f80 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
21f90 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
21fa0 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
21fb0 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
21fc0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fe0 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f    /* array of co
21ff0 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a  lumn indexes */.
22000 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
22010 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
22020 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
22030 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
22040 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
22050 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
22060 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
22070 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
22080 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
22090 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
220a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
220b0 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
220c0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
220d0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
220e0 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
220f0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
22100 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f  qlite3ExprWalkNo
22110 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  op(Walker*, Expr
22120 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
22130 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
22140 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
22150 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
22160 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
22170 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
22180 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
22190 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
221a0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
221b0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
221c0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
221d0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
221e0 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
221f0 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
22200 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
22210 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
22220 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
22230 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
22240 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
22250 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
22260 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
22270 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
22280 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
22290 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
222a0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
222b0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
222c0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
222d0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
222e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
222f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
22300 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
22310 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
22320 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
22350 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
22360 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
22370 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
22380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
22390 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
223a0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
223b0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
223c0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
223d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
223e0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
223f0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
22400 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
22410 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
22420 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
22430 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
22440 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
22450 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
22460 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
22470 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
22480 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
22490 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
224a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
224b0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
224c0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
224d0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
224e0 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
224f0 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
22500 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
22510 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
22520 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
22530 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
22540 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
22550 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
22560 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
22570 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
22580 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
22590 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
225a0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
225b0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
225c0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
225d0 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
225e0 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
225f0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
22600 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
22610 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
22620 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
22630 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
22640 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
22650 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
22660 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
22670 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
22680 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
22690 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
226a0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
226b0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
226c0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
226d0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
226e0 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
226f0 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
22710 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
22720 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22740 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
22750 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
22760 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
22770 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
22780 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
227c0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
227d0 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
227e0 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
227f0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
22800 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
22810 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
22820 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
22830 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
22840 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
22850 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
22860 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
22870 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
22880 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
22890 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
228a0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
228b0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
228c0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
228d0 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
228e0 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
228f0 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
22900 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
22910 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
22920 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
22930 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22940 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
22950 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
22960 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
22970 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
22980 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
22990 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
229a0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
229b0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
229c0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
229d0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
229e0 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
229f0 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
22a00 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ).#ifdef SQLITE_
22a10 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69  DEBUG.  int sqli
22a20 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  te3NomemError(in
22a30 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
22a40 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
22a50 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
22a60 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
22a70 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  T sqlite3NomemEr
22a80 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
22a90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
22aa0 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ERR_NOMEM_BKPT s
22ab0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
22ac0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
22ad0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
22ae0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
22af0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
22b00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
22b10 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
22b20 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
22b30 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  M.#endif../*.** 
22b40 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
22b50 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
22b60 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
22b70 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
22b80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22b90 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
22ba0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
22bb0 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
22bc0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
22bd0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
22be0 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
22bf0 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
22c00 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
22c10 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
22c20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22c30 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
22c40 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
22c50 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
22c60 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
22c70 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
22c80 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
22c90 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
22ca0 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
22cb0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
22cc0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
22cd0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
22ce0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
22cf0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
22d00 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
22d10 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
22d20 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
22d30 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
22d40 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
22d50 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
22d60 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
22d70 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
22d80 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
22d90 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
22da0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
22db0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
22dc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
22dd0 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
22de0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
22df0 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
22e00 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
22e10 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
22e20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
22e30 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
22e40 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
22e50 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
22e60 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
22e70 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
22e80 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
22e90 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
22ea0 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
22eb0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
22ec0 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
22ed0 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
22ee0 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
22ef0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
22f00 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
22f10 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
22f20 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
22f30 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
22f40 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
22f50 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
22f60 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
22f70 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
22f80 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
22f90 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
22fa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22fb0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
22fc0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
22fd0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
22fe0 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
22ff0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
23000 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
23010 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
23020 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
23030 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
23040 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
23050 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
23060 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
23070 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
23080 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
23090 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
230a0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
230b0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
230c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
230d0 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
230e0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
230f0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
23100 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
23110 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
23120 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
23130 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
23140 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
23150 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
23160 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
23170 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
23180 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
23190 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
231a0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
231b0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
231c0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
231d0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
231e0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
231f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23200 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
23210 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
23220 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
23230 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
23240 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
23250 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23260 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
23270 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
23280 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
23290 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
232a0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
232b0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
232c0 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
232d0 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
232e0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
232f0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
23300 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
23310 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
23320 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
23330 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
23340 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
23350 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
23360 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
23370 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
23380 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
23390 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
233a0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
233b0 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
233c0 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
233d0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
233e0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
233f0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
23400 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
23410 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
23420 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
23430 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
23440 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
23450 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
23460 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
23470 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
23480 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
23490 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
234a0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
234b0 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
234c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
234d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
234e0 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
234f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
23500 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23510 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
23520 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
23530 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
23540 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
23550 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
23560 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
23570 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
23580 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
23590 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
235a0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
235b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
235c0 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
235d0 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
235e0 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
235f0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
23600 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c  lite3ScratchMall
23610 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
23620 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
23630 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73  (void*);.void *s
23640 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
23650 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
23660 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
23670 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23680 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
23690 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  id);.#ifndef SQL
236a0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
236b0 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
236c0 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
236d0 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
236e0 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
236f0 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
23700 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
23710 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
23720 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
23730 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
23740 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
23750 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
23760 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
23770 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
23780 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
23790 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
237a0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
237b0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
237c0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
237d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
237e0 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
237f0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
23800 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
23810 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
23820 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
23830 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
23840 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
23850 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
23860 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23870 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
23880 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
23890 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
238a0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
238b0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
238c0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
238d0 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
238e0 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
238f0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
23900 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
23910 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
23920 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
23930 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
23940 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
23950 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
23960 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
23970 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
23980 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
23990 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
239a0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
239b0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
239c0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
239d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
239e0 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
239f0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
23a00 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
23a10 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
23a20 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
23a30 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
23a40 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
23a50 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
23a60 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
23a70 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
23a80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
23a90 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
23aa0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
23ab0 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
23ac0 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
23ad0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
23ae0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
23af0 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
23b00 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
23b10 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
23b20 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
23b30 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
23b40 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
23b50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
23b60 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
23b70 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
23b80 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
23b90 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
23ba0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f  (SQLITE_MUTEX_NO
23bb0 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  OP).  void sqlit
23bc0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
23bd0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
23be0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
23bf0 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e  oryBarrier().#en
23c00 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74  dif..sqlite3_int
23c10 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  64 sqlite3Status
23c20 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
23c30 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70   sqlite3StatusUp
23c40 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
23c50 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f   sqlite3StatusDo
23c60 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  wn(int, int);.vo
23c70 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
23c80 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69  Highwater(int, i
23c90 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  nt);../* Access 
23ca0 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
23cb0 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
23cc0 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
23cd0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
23ce0 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
23cf0 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
23d00 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
23d10 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64  ex(void);..#ifnd
23d20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
23d30 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
23d40 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
23d50 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
23d60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23d70 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
23d80 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
23d90 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
23da0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
23db0 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
23dc0 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
23dd0 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
23de0 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
23df0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
23e00 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
23e10 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
23e20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
23e30 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23e50 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
23e60 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
23e70 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
23e80 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
23e90 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
23ea0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
23eb0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
23ec0 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
23ed0 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
23ee0 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  */.};..void sqli
23ef0 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
23f00 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
23f10 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
23f20 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
23f30 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
23f40 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
23f50 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
23f60 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
23f70 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
23f80 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
23f90 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
23fa0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
23fb0 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
23fc0 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
23fd0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
23fe0 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
23ff0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
24000 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
24010 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
24020 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
24030 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
24040 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
24050 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
24060 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
24070 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
24080 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
24090 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
240a0 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a  ewExpr(TreeView*
240b0 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75  , const Expr*, u
240c0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
240d0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
240e0 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
240f0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
24100 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
24110 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
24120 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
24130 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
24140 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
24150 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
24160 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
24170 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
24180 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
24190 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
241a0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
241b0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
241c0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
241d0 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
241e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
241f0 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
24200 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
24210 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65  void sqlite3Toke
24220 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61  nInit(Token*,cha
24230 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24240 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
24250 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
24260 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
24270 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
24280 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
24290 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
242a0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
242b0 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
242c0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
242d0 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
242e0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
242f0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
24300 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24310 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
24320 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
24330 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
24340 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
24350 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
24360 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
24370 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23  Cache(Parse*);.#
24380 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24390 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  UG.int sqlite3No
243a0 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72  TempsInRange(Par
243b0 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65  se*,int,int);.#e
243c0 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74  ndif.Expr *sqlit
243d0 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
243e0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
243f0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
24400 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
24410 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
24420 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
24430 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
24440 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
24450 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
24460 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
24470 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
24480 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
24490 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
244a0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
244b0 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
244c0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
244d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
244e0 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
244f0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
24500 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24510 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
24520 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
24530 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24540 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
24550 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
24560 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
24570 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
24580 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
24590 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
245a0 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72  e3ExprListSetSor
245b0 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a  tOrder(ExprList*
245c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
245d0 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
245e0 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
245f0 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
24600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24610 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
24620 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
24630 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
24640 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
24650 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
24660 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
24670 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
24680 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
24690 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
246a0 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
246b0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
246c0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
246d0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
246e0 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
246f0 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
24700 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24710 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
24720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24730 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
24740 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
24750 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
24760 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
24770 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
24780 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
24790 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
247a0 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
247b0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
247c0 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
247d0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
247e0 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
247f0 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
24800 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
24810 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
24820 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
24830 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
24840 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20  olumn**);.Table 
24850 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
24860 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
24870 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
24880 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
24890 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
248a0 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
248b0 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
248c0 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
248d0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
248e0 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
248f0 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
24900 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
24910 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
24920 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
24930 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
24940 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
24950 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NS.  void sqlite
24960 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
24970 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
24980 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73  , Column*);.#els
24990 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
249a0 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
249b0 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20  esFromName(T,C) 
249c0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
249d0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
249e0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
249f0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Token*,Token*);.
24a00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
24a10 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
24a20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24a30 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
24a40 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
24a50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
24a60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
24a70 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
24a80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
24a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
24aa0 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
24ab0 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  se*,ExprSpan*);.
24ac0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
24ad0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
24ae0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
24af0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
24b00 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24b10 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
24b20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
24b30 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
24b40 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
24b50 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b70 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
24b80 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
24b90 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
24ba0 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
24bb0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
24bc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24bd0 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29  odeOnce(Parse *)
24be0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
24bf0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
24c00 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ST.# define sqli
24c10 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
24c20 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
24c30 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
24c40 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
24c50 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
24c60 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
24c70 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
24c80 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
24c90 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
24ca0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
24cb0 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
24cc0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
24cd0 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
24ce0 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
24cf0 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
24d00 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
24d10 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
24d20 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
24d30 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
24d40 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
24d50 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
24d60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24d70 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74  BUILTIN_TEST.int
24d80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
24d90 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
24da0 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
24db0 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
24dc0 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
24dd0 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
24de0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24df0 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
24e00 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
24e10 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
24e20 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
24e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
24e40 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
24e50 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
24e60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
24e70 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
24e80 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
24e90 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
24ea0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
24eb0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
24ec0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
24ed0 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
24ee0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
24ef0 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
24f00 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
24f10 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
24f20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
24f30 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
24f40 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
24f50 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24f60 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
24f70 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
24f80 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
24f90 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
24fa0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
24fb0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
24fc0 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
24fd0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
24fe0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
24ff0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
25000 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
25010 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
25020 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
25030 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25040 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
25050 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
25060 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25070 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
25080 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
25090 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
250a0 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
250b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
250c0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
250d0 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
250e0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
250f0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
25100 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
25110 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
25120 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
25130 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
25140 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
25150 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
25160 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
25170 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
25180 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
25190 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
251a0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
251b0 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
251c0 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
251d0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
251e0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
251f0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
25200 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
25210 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
25220 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
25230 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
25240 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
25250 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
25260 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
25270 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
25280 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
25290 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
252a0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
252b0 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
252c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
252d0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
252e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
25310 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
25320 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
25330 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
25340 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
25350 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
25360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
25370 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
25380 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
25390 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
253a0 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
253b0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
253c0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
253d0 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
253e0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
253f0 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
25400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25410 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
25420 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
25430 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
25440 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
25450 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
25460 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25470 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
25480 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
25490 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
254a0 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
254b0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
254c0 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
254d0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
254e0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
254f0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
25500 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
25510 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
25540 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25550 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
25560 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
25570 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25580 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
25590 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
255a0 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
255b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
255c0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
255d0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
255e0 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25600 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
25610 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45  ist*,u32,Expr*,E
25620 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
25630 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
25640 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
25650 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
25660 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
25670 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
25680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
25690 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
256a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
256b0 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
256c0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
256d0 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
256e0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
256f0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
25700 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
25710 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
25720 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25730 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
25740 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
25750 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
25760 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
25770 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
25780 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
25790 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
257a0 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
257b0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
257c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
257d0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
257e0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
257f0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
25800 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
25810 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
25820 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
25830 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
25840 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
25850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
25860 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
25870 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
25880 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
25890 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
258a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
258b0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
258c0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
258d0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
258e0 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
258f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
25900 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
25910 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
25920 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
25930 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
25940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
25950 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
25960 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
25970 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
25980 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
25990 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
259a0 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
259b0 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
259c0 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
259d0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
259e0 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
259f0 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
25a00 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
25a10 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
25a20 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
25a30 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
25a40 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
25a50 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
25a60 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
25a70 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
25a80 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
25a90 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
25aa0 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
25ab0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25ac0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
25ad0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
25ae0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
25af0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
25b00 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
25b10 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65  olumnToReg(Parse
25b20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
25b30 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25b40 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
25b50 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
25b60 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
25b70 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
25b80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
25b90 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
25ba0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25bb0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25bc0 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
25bd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25be0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25bf0 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
25c00 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25c10 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
25c20 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
25c30 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
25c40 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
25c50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25c60 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
25c70 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
25c80 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
25c90 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
25ca0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
25cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25cc0 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
25cd0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
25ce0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
25cf0 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
25d00 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
25d10 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
25d20 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
25d30 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
25d40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
25d50 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
25d60 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
25d70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25d80 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
25d90 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
25da0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
25db0 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
25dc0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
25dd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
25de0 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
25df0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
25e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25e10 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
25e20 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
25e30 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
25e40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
25e50 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
25e60 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
25e70 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
25e80 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
25e90 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
25ea0 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
25eb0 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
25ec0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
25ed0 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
25ee0 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
25ef0 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
25f00 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
25f10 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
25f20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
25f30 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25f40 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
25f50 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
25f60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25f70 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
25f80 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
25f90 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
25fa0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
25fb0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
25fc0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
25fd0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
25fe0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
25ff0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
26000 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
26010 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
26020 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
26030 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
26040 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
26050 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
26060 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
26070 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
26080 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
26090 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
260a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
260b0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
260c0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
260d0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
260e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
260f0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
26100 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
26110 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
26120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
26130 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
26140 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
26150 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
26160 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
26170 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
26180 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
26190 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
261a0 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
261b0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
261c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
261d0 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
261e0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
261f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26200 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
26210 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
26220 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26230 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
26240 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
26250 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
26260 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
26270 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
26280 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
26290 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
262a0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
262b0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
262c0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
262d0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
262e0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
262f0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
26300 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  EST.void sqlite3
26310 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
26320 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
26330 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
26340 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  e(void);.#endif.
26350 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
26360 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
26370 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26380 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
26390 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
263a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
263b0 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
263c0 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
263d0 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
263e0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
263f0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
26400 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26410 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
26420 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
26430 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
26440 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
26450 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
26460 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
26470 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
26480 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26490 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
264a0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
264b0 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
264c0 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
264d0 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
264e0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
264f0 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
26500 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
26510 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
26520 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
26530 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
26540 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
26550 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
26560 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
26570 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
26580 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
26590 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
265a0 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
265b0 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
265c0 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
265d0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
265e0 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
265f0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
26600 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
26610 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
26620 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26630 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
26640 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
26650 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
26660 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
26670 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
26680 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
26690 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
266a0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
266b0 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
266c0 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
266d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
266e0 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
266f0 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
26700 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
26710 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
26720 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
26730 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
26740 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
26750 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
26760 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
26770 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
26780 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
26790 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
267a0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
267b0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
267c0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
267d0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
267e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26800 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
26810 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  int*,int*);.void
26820 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
26830 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
26840 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
26850 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
26860 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
26870 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
26880 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
26890 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69  ble*, int, u8, i
268a0 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
268b0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
268c0 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
268d0 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
268e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
268f0 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
26900 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
26910 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
26920 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26930 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
26940 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
26950 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
26960 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
26970 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
26980 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
26990 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
269a0 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
269b0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
269c0 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
269d0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
269e0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
269f0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
26a00 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
26a10 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
26a20 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
26a30 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
26a40 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
26a50 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
26a60 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
26a70 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
26a80 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
26a90 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
26aa0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
26ab0 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45  *,int);.#if SELE
26ac0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
26ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26ae0 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74  ctSetName(Select
26af0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
26b00 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26b10 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
26b20 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  ame(A,B).#endif.
26b30 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
26b40 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46  rtBuiltinFuncs(F
26b50 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75  uncDef*,int);.Fu
26b60 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
26b70 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
26b80 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
26b90 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
26ba0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
26bb0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
26bc0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
26bd0 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
26be0 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
26bf0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
26c00 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e  3RegisterPerConn
26c10 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e  ectionBuiltinFun
26c20 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
26c30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
26c40 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74  etyCheckOk(sqlit
26c50 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
26c60 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b  3SafetyCheckSick
26c70 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  OrOk(sqlite3*);.
26c80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e  void sqlite3Chan
26c90 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c  geCookie(Parse*,
26ca0 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66   int);..#if !def
26cb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26cc0 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e  _VIEW) && !defin
26cd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
26ce0 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c  RIGGER).void sql
26cf0 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56  ite3MaterializeV
26d00 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  iew(Parse*, Tabl
26d10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
26d20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
26d30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
26d40 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69  GGER.  void sqli
26d50 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28  te3BeginTrigger(
26d60 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54  Parse*, Token*,T
26d70 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64  oken*,int,int,Id
26d80 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a  List*,SrcList*,.
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
26db0 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ,int, int);.  vo
26dc0 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
26dd0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
26de0 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f  TriggerStep*, To
26df0 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ken*);.  void sq
26e00 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
26e10 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26e20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
26e30 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
26e40 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72  erPtr(Parse*, Tr
26e50 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67  igger*);.  Trigg
26e60 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
26e70 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a  ersExist(Parse *
26e80 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45  , Table*, int, E
26e90 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70  xprList*, int *p
26ea0 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72  Mask);.  Trigger
26eb0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
26ec0 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  List(Parse *, Ta
26ed0 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  ble *);.  void s
26ee0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
26ef0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
26f00 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70  gger *, int, Exp
26f10 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62  rList*, int, Tab
26f20 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  le *,.          
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f40 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29    int, int, int)
26f50 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26f60 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
26f70 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72  rect(Parse *, Tr
26f80 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a  igger *, Table *
26f90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
26fa0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56  ;.  void sqliteV
26fb0 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
26fc0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
26fd0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
26fe0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26ff0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53  e3DeleteTriggerS
27000 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  tep(sqlite3*, Tr
27010 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54  iggerStep*);.  T
27020 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
27030 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74  te3TriggerSelect
27040 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  Step(sqlite3*,Se
27050 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65  lect*);.  Trigge
27060 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
27070 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
27080 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
27090 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20    Select*,u8);. 
270d0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
270e0 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
270f0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
27100 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
27110 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  , Expr*, u8);.  
27120 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
27130 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
27140 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
27150 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20  oken*, Expr*);. 
27160 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
27170 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
27180 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
27190 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
271a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
271b0 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
271c0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
271d0 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
271e0 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
271f0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
27200 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
27210 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
27220 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
27230 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
27240 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
27250 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
27260 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  p)).# define sql
27270 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
27280 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
27290 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  l==0).#else.# de
272a0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
272b0 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
272c0 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
272d0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
272e0 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
272f0 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
27300 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
27310 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
27320 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
27330 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
27340 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
27350 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
27360 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
27370 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
27380 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
27390 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
273a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
273b0 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
273c0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
273d0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
273e0 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
273f0 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
27400 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20  l(p) 1.# define 
27410 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
27420 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
27430 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
27440 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
27450 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
27460 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
27470 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27480 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
27490 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
274a0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
274b0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
274c0 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
274d0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
274e0 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
274f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
27500 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
27510 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
27520 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
27530 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
27540 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
27550 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
27560 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
27570 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
27580 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
27590 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
275a0 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
275b0 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
275c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
275d0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
275e0 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
275f0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
27600 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
27610 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
27620 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
27630 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
27640 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27650 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
27660 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
27670 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
27680 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
27690 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
276a0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
276b0 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
276c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
276d0 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
276e0 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
276f0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
27700 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
27710 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
27720 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27730 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
27740 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27750 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
27760 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
27770 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
27780 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
27790 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
277a0 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
277b0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
277c0 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
277d0 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
277e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
277f0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
27800 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
27810 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
27820 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
27830 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
27840 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
27850 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
27860 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
27870 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
27880 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
27890 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
278a0 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
278b0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
278c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
278d0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
278e0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
278f0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
27900 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
27910 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
27920 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
27930 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
27940 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
27950 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
27960 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
27970 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
27980 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
27990 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
279a0 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
279b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
279c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
279d0 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
279e0 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
279f0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
27a00 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27a10 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
27a20 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
27a30 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
27a40 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
27a50 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
27a60 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
27a70 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
27a80 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
27a90 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
27aa0 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
27ab0 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  f../*.** Routine
27ac0 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
27ad0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
27ae0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
27af0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
27b00 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
27b10 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
27b20 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
27b30 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
27b40 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
27b50 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
27b60 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
27b70 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
27b80 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
27b90 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
27ba0 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
27bb0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
27bc0 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
27bd0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
27be0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
27bf0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
27c00 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
27c10 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
27c20 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
27c30 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
27c40 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
27c50 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
27c60 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
27c70 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
27c80 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
27c90 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
27ca0 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
27cb0 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
27cc0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
27cd0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
27ce0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
27cf0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
27d00 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
27d10 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
27d20 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
27d30 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
27d40 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
27d50 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
27d60 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
27d70 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
27d80 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
27d90 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
27da0 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
27db0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
27dc0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
27dd0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
27de0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
27df0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
27e00 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
27e10 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
27e20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
27e30 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
27e40 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
27e50 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
27e60 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
27e70 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
27e80 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
27e90 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
27ea0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
27eb0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
27ec0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
27ed0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
27ee0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
27ef0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
27f00 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
27f10 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
27f20 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
27f30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
27f40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27f50 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
27f60 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
27f70 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
27f80 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
27f90 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
27fa0 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
27fb0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
27fc0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
27fd0 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
27fe0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
27ff0 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
28000 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
28010 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
28020 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
28030 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
28040 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
28050 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
28060 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
28070 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
28080 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
28090 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
280a0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
280b0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
280c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
280d0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
280e0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
280f0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
28100 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
28110 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
28120 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
28130 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
28140 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
28150 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
28160 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
28170 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
28180 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
28190 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
281a0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
281b0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
281c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
281d0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
281e0 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
281f0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
28200 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
28210 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
28220 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
28230 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
28240 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
28250 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
28260 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
28270 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
28280 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
28290 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
282a0 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
282b0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
282c0 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
282d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
282e0 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
282f0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
28300 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
28310 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
28320 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
28330 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
28340 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
28350 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28360 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
28370 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
28380 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
28390 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
283a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
283b0 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
283c0 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
283d0 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
283e0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
283f0 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
28400 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
28410 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
28420 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
28430 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
28440 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
28450 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
28460 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
28470 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
28480 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20  t void *,u8,.   
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284a0 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
284b0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
284c0 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
284d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
284e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
284f0 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
28500 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
28510 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
28520 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
28530 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
28540 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
28550 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
28560 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
28570 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
28580 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
28590 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
285a0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
285b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
285c0 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
285d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
285e0 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
285f0 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
28600 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
28610 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
28620 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
28630 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
28640 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69   const char sqli
28650 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a  te3StrBINARY[];.
28660 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
28670 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
28680 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
28690 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
286a0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
286b0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
286c0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
286d0 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
286e0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
286f0 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
28700 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
28710 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
28720 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20  ern FuncDefHash 
28730 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
28740 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
28750 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
28760 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
28770 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
28780 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
28790 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
287a0 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
287b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
287c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
287d0 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
287e0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
287f0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
28800 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
28810 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
28820 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
28830 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
28840 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28850 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
28860 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
28870 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
28880 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
28890 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
288a0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
288b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
288c0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
288d0 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
288e0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
288f0 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c  bselect(Parse *,
28900 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
28910 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28920 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
28930 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
28940 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
28950 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f  sqlite3SelectWro
28960 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28  ngNumTermsError(
28970 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53  Parse *pParse, S
28980 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73  elect *p);.int s
28990 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
289a0 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
289b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
289c0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
289d0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
289e0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
289f0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
28a00 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
28a10 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
28a20 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43  rListNames(NameC
28a30 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73  ontext*, ExprLis
28a40 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
28a50 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
28a60 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
28a70 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
28a80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28a90 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
28aa0 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
28ab0 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
28ac0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
28ad0 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
28ae0 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
28af0 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
28b00 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
28b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28b20 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
28b30 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
28b40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28b50 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
28b60 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
28b70 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
28b80 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
28b90 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
28ba0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
28bb0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
28bc0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
28bd0 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
28be0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
28bf0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
28c00 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
28c10 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69  char*, u8*);.voi
28c20 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
28c30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
28c40 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
28c50 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
28c60 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
28c70 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
28c80 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
28c90 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
28ca0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
28cb0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
28cc0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
28cd0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
28ce0 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
28cf0 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
28d00 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
28d10 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
28d20 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
28d30 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
28d40 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
28d50 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
28d60 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
28d70 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
28d80 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
28d90 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
28da0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
28db0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
28dc0 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
28dd0 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
28de0 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
28df0 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
28e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
28e10 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
28e20 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
28e30 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
28e40 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
28e50 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
28e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
28e70 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
28e80 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
28e90 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
28ea0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
28eb0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
28ec0 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
28ed0 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64  *, Index*);.#ifd
28ee0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
28ef0 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
28f00 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
28f10 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
28f20 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
28f30 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
28f40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
28f50 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
28f60 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
28f70 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
28f80 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
28f90 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
28fa0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
28fb0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
28fc0 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
28fd0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
28fe0 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
28ff0 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
29000 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
29010 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33  OomFault(sqlite3
29020 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29030 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33  OomClear(sqlite3
29040 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
29050 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
29060 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
29070 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
29080 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
29090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
290a0 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
290b0 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63  um*, sqlite3*, c
290c0 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
290d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
290e0 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
290f0 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
29100 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29110 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
29120 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c  ndAll(StrAccum*,
29130 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
29140 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
29150 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69  Char(StrAccum*,i
29160 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a  nt,char);.char *
29170 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
29180 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
29190 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
291a0 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
291b0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
291c0 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
291d0 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
291e0 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
291f0 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
29200 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
29210 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
29220 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
29230 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
29240 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
29250 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
29260 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
29270 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
29280 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
29290 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
292a0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
292b0 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
292c0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
292d0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
292e0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
292f0 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65  beSetValue(Parse
29300 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
29310 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
29320 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  u8,int,int*);.in
29330 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
29340 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
29350 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
29360 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
29370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
29380 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
29390 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
293a0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
293b0 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
293c0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
293d0 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
293e0 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lue**);.#endif..
293f0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
29400 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
29410 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
29420 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
29430 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
29440 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f  id*(*)(u64));.vo
29450 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
29460 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
29470 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
29480 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
29490 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
294a0 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
294b0 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
294c0 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
294d0 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
294e0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
294f0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
29500 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
29510 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
29520 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29530 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
29540 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
29550 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
29560 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
29570 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29580 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
29590 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
295a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
295b0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
295c0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
295d0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
295e0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
295f0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
29600 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
29610 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
29620 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
29630 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
29640 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
29650 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
29660 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
29670 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
29680 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
29690 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
296a0 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
296b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
296c0 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
296d0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
296e0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
296f0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
29700 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
29710 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
29720 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
29730 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
29740 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
29750 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
29760 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
29770 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
29780 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
29790 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
297a0 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
297b0 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
297c0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
297d0 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
297e0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
297f0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
29800 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
29810 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
29820 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
29830 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
29840 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
29850 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
29860 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
29870 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
29880 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
29890 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
298a0 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
298b0 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
298c0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
298d0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
298e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
298f0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
29900 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
29910 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
29920 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
29930 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
29940 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
29950 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
29960 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
29970 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
29980 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
29990 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
299a0 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
299b0 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
299c0 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
299d0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
299e0 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
299f0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
29a00 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
29a10 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
29a20 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
29a30 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
29a40 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
29a50 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f  leInit(Parse*,Mo
29a60 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
29a70 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
29a80 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69  sTableClear(sqli
29a90 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  te3*,Module*);.v
29aa0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
29ab0 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
29ac0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
29ad0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
29ae0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
29af0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
29b00 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
29b10 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
29b20 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
29b30 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
29b40 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
29b50 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
29b60 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
29b70 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
29b80 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
29b90 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
29ba0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
29bb0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
29bc0 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
29bd0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
29be0 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
29bf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
29c00 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
29c10 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
29c20 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
29c30 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
29c40 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
29c50 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
29c60 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
29c70 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
29c80 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
29c90 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
29ca0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
29cb0 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
29cc0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
29cd0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
29ce0 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74  **);.sqlite3_int
29cf0 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75  64 sqlite3StmtCu
29d00 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65  rrentTime(sqlite
29d10 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  3_context*);.int
29d20 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
29d30 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
29d40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
29d50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
29d60 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
29d70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
29d80 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
29d90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
29da0 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65 2a  rserReset(Parse*
29db0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
29dc0 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
29dd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29de0 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
29df0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
29e00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
29e10 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
29e20 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
29e30 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
29e40 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
29e50 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
29e60 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
29e70 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
29e80 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
29e90 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
29ea0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29eb0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
29ec0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
29ed0 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
29ee0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
29ef0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
29f00 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
29f10 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
29f20 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
29f30 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
29f40 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20  QLITE_OMIT_CTE. 
29f50 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69   With *sqlite3Wi
29f60 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74  thAdd(Parse*,Wit
29f70 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  h*,Token*,ExprLi
29f80 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  st*,Select*);.  
29f90 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
29fa0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29fb0 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73  With*);.  void s
29fc0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 50  qlite3WithPush(P
29fd0 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38  arse*, With*, u8
29fe0 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
29ff0 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2a000 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20  (x,y,z).#define 
2a010 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
2a020 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(x,y).#endif../
2a030 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
2a040 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
2a050 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
2a060 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
2a070 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
2a080 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
2a090 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
2a0a0 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
2a0b0 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
2a0c0 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
2a0d0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
2a0e0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
2a0f0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
2a100 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
2a110 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
2a120 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
2a130 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
2a140 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
2a150 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
2a160 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
2a170 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
2a180 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f  nality is.** pro
2a190 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
2a1a0 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
2a1b0 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
2a1c0 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
2a1d0 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
2a1e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2a1f0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
2a200 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2a210 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2a220 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
2a230 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
2a240 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2a250 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2a260 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
2a270 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
2a280 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
2a290 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2a2a0 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
2a2b0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
2a2c0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  List*, int, int*
2a2d0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
2a2e0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2a2f0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2a300 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
2a310 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
2a320 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
2a330 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
2a340 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2a350 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
2a360 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2a370 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
2a380 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2a390 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
2a3a0 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2a3b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2a3c0 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
2a3d0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2a3e0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
2a3f0 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64  )         0.  #d
2a400 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
2a410 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
2a420 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
2a430 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a440 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
2a450 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
2a460 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
2a470 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
2a480 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2a490 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
2a4a0 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
2a4b0 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
2a4c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2a4d0 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
2a4e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
2a4f0 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
2a500 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
2a510 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
2a520 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
2a530 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
2a540 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
2a550 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
2a560 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
2a570 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
2a580 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
2a590 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2a5a0 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
2a5b0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2a5c0 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
2a5d0 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
2a5e0 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
2a5f0 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
2a600 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
2a610 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
2a620 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  if SQLITE_OMIT_B
2a630 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69  UILTIN_TEST.** i
2a640 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2a650 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2a660 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
2a670 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
2a680 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2a690 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
2a6a0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2a6b0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
2a6c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2a6d0 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2a6e0 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
2a6f0 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
2a700 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
2a710 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
2a720 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
2a730 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
2a740 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
2a750 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
2a760 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
2a770 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
2a780 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2a790 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2a7a0 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
2a7b0 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
2a7c0 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
2a7d0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
2a7e0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
2a7f0 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
2a800 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
2a810 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2a820 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
2a830 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
2a840 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
2a850 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2a860 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
2a870 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
2a880 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
2a890 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
2a8a0 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
2a8b0 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
2a8c0 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
2a8d0 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
2a8e0 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
2a8f0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2a900 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
2a910 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
2a920 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
2a930 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2a940 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
2a950 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
2a960 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
2a970 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
2a980 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2a990 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
2a9a0 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
2a9b0 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
2a9c0 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
2a9d0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
2a9e0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2a9f0 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  u32, int*);..int
2aa00 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2aa10 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2aa20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2aa30 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2aa40 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2aa50 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2aa60 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2aa70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2aa80 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
2aa90 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
2aaa0 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28  e3JournalCreate(
2aab0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2aac0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2aad0 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d  ite3JournalIsInM
2aae0 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69  emory(sqlite3_fi
2aaf0 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  le *p);.void sql
2ab00 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70  ite3MemJournalOp
2ab10 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  en(sqlite3_file 
2ab20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2ab30 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e  3ExprSetHeightAn
2ab40 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50  dFlags(Parse *pP
2ab50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
2ab60 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
2ab70 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
2ab80 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
2ab90 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
2aba0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
2abb0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
2abc0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
2abd0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2abe0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2abf0 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
2ac00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2ac10 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
2ac20 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
2ac30 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
2ac40 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
2ac50 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
2ac60 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
2ac70 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2ac80 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
2ac90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2aca0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
2acb0 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
2acc0 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
2acd0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
2ace0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2acf0 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
2ad00 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
2ad10 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
2ad20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2ad30 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2ad40 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
2ad50 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ad60 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2ad70 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
2ad80 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2ad90 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
2ada0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2adb0 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
2adc0 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
2add0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
2ade0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2adf0 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2ae00 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2ae10 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2ae20 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2ae30 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2ae40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2ae50 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2ae60 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2ae70 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2ae80 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2ae90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2aea0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2aeb0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2aec0 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2aed0 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2aee0 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2aef0 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2af00 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2af10 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2af20 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2af30 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2af40 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2af50 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2af60 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2af70 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2af80 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2af90 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2afa0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2afb0 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2afc0 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2afd0 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2afe0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2aff0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2b000 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2b010 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2b020 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2b030 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2b040 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2b050 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2b060 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2b070 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2b080 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2b090 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2b0a0 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2b0b0 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2b0c0 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2b0d0 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2b0e0 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2b0f0 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2b100 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2b110 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2b120 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2b130 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2b140 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2b150 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2b160 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2b170 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2b180 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2b190 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2b1a0 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2b1b0 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2b1c0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2b1d0 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2b1e0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2b1f0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2b200 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2b210 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2b220 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2b230 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2b240 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2b250 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2b260 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2b270 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2b280 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2b290 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2b2a0 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2b2b0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2b2c0 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2b2d0 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2b2e0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2b2f0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2b300 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2b310 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2b320 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2b330 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2b340 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2b350 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2b360 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2b370 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2b380 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2b390 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2b3a0 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2b3b0 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2b3c0 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2b3d0 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2b3e0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2b3f0 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2b400 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2b410 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2b420 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2b430 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2b440 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2b450 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2b460 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2b470 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2b480 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2b490 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2b4a0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2b4b0 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2b4c0 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2b4d0 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2b4e0 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2b4f0 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2b500 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2b510 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2b520 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2b530 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2b540 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2b550 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2b560 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2b570 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2b580 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2b590 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2b5a0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2b5b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2b5c0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2b5d0 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2b5e0 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2b5f0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2b600 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2b610 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2b620 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2b630 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2b640 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2b650 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2b660 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2b670 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2b680 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2b690 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2b6a0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2b6b0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2b6c0 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2b6d0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
2b6e0 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
2b6f0 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
2b700 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2b710 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2b720 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
2b730 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2b740 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2b750 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2b760 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2b770 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2b780 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2b790 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2b7a0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2b7b0 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2b7c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2b7d0 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2b7e0 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2b7f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2b800 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2b810 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2b820 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2b830 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2b840 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2b850 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2b860 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
2b870 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.