/ Hex Artifact Content
Login

Artifact eaf210295b551d4e40e622aec1b2261c0b28f844:


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 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  c.h"../*.** Thes
0300: 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f 75 6c  e #defines shoul
0310: 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20 66 69  d enable >2GB fi
0320: 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f  le support on PO
0330: 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e  SIX if the.** un
0340: 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61 74 69  derlying operati
0350: 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70 6f 72  ng system suppor
0360: 74 73 20 69 74 2e 20 20 49 66 20 74 68 65 20 4f  ts it.  If the O
0370: 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65  S lacks.** large
0380: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f   file support, o
0390: 72 20 69 66 20 74 68 65 20 4f 53 20 69 73 20 77  r if the OS is w
03a0: 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20 73 68  indows, these sh
03b0: 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a  ould be no-ops..
03c0: 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 37  **.** Ticket #27
03d0: 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47 45 46  39:  The _LARGEF
03e0: 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f  ILE_SOURCE macro
03f0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 62 65 66   must appear bef
0400: 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65  ore any.** syste
0410: 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20 48 65  m #includes.  He
0420: 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20  nce, this block 
0430: 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62 65 20  of code must be 
0440: 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a  the very first.*
0450: 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f  * code in all so
0460: 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a  urce files..**.*
0470: 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * Large file sup
0480: 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69 73 61  port can be disa
0490: 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 2d  bled using the -
04a0: 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  DSQLITE_DISABLE_
04b0: 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e  LFS switch.** on
04c0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f   the compiler co
04d0: 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69  mmand line.  Thi
04e0: 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 69  s is necessary i
04f0: 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c  f you are compil
0500: 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65  ing.** on a rece
0510: 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20  nt machine (ex: 
0520: 52 65 64 20 48 61 74 20 37 2e 32 29 20 62 75 74  Red Hat 7.2) but
0530: 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72 20 63   you want your c
0540: 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f  ode to work.** o
0550: 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69  n an older machi
0560: 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20  ne (ex: Red Hat 
0570: 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20 63 6f  6.0).  If you co
0580: 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48 61 74  mpile on Red Hat
0590: 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20   7.2.** without 
05a0: 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53  this option, LFS
05b0: 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42 75 74   is enable.  But
05c0: 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20 65 78   LFS does not ex
05d0: 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72 6e 65  ist in the kerne
05e0: 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61 74 20  l.** in Red Hat 
05f0: 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f 64 65  6.0, so the code
0600: 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65   won't work.  He
0610: 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d  nce, for maximum
0620: 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61   binary.** porta
0630: 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f 75 6c  bility you shoul
0640: 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a  d omit LFS..**.*
0650: 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 70  * The previous p
0660: 61 72 61 67 72 61 70 68 20 77 61 73 20 77 72 69  aragraph was wri
0670: 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20 20 28  tten in 2005.  (
0680: 54 68 69 73 20 70 61 72 61 67 72 61 70 68 20 69  This paragraph i
0690: 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20  s written.** on 
06a0: 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54 68 65  2008-11-28.) The
06b0: 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e  se days, all Lin
06c0: 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f  ux kernels suppo
06d0: 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73 2c 20  rt large files, 
06e0: 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64  so.** you should
06f0: 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76 65 20   probably leave 
0700: 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20 42 75  LFS enabled.  Bu
0710: 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65 64 20  t some embedded 
0720: 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a  platforms might.
0730: 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77  ** lack LFS in w
0740: 68 69 63 68 20 63 61 73 65 20 74 68 65 20 53 51  hich case the SQ
0750: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0760: 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73 74 69   macro might sti
0770: 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a  ll be useful..**
0780: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0790: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
07a0: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
07b0: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
07c0: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
07d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
07e0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
07f0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
0800: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
0810: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
0820: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
0830: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
0840: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0850: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0860: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0870: 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66  dif../* Needed f
0880: 6f 72 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e  or various defin
0890: 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66  itions... */.#if
08a0: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f   defined(__GNUC_
08b0: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
08c0: 47 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20 64 65  GNU_SOURCE).# de
08d0: 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45  fine _GNU_SOURCE
08e0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
08f0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
0900: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42  ) && !defined(_B
0910: 53 44 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66  SD_SOURCE).# def
0920: 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a  ine _BSD_SOURCE.
0930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f  #endif../*.** Fo
0940: 72 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74  r MinGW, check t
0950: 6f 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20  o see if we can 
0960: 69 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64  include the head
0970: 65 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  er file containi
0980: 6e 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f  ng its.** versio
0990: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61  n information, a
09a0: 6d 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67  mong other thing
09b0: 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68  s.  Normally, th
09c0: 69 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47  is internal MinG
09d0: 57 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65  W.** header file
09e0: 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65   would [only] be
09f0: 20 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61   included automa
0a00: 74 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72  tically by other
0a10: 20 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a   MinGW header.**
0a20: 20 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c   files; however,
0a30: 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76   the contained v
0a40: 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ersion informati
0a50: 6f 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72  on is now requir
0a60: 65 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65  ed by this.** he
0a70: 61 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72  ader file to wor
0a80: 6b 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20  k around binary 
0a90: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73  compatibility is
0aa0: 73 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29  sues (see below)
0ab0: 20 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20   and.** this is 
0ac0: 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77  the only known w
0ad0: 61 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f  ay to reliably o
0ae0: 62 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20  btain it.  This 
0af0: 65 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b  entire #if block
0b00: 0a 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d  .** would be com
0b10: 70 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73  pletely unnecess
0b20: 61 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73  ary if there was
0b30: 20 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f   any other way o
0b40: 66 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d  f detecting.** M
0b50: 69 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70  inGW via their p
0b60: 72 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67  reprocessor (e.g
0b70: 2e 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d  . if they custom
0b80: 69 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74  ized their GCC t
0b90: 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65  o define.** some
0ba0: 20 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20   MinGW-specific 
0bb0: 6d 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63  macros).  When c
0bc0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e  ompiling for Min
0bd0: 47 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a  GW, either the.*
0be0: 2a 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20  * _HAVE_MINGW_H 
0bf0: 6f 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f  or _HAVE__MINGW_
0c00: 48 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72  H (note the extr
0c10: 61 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61  a underscore) ma
0c20: 63 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64  cro must be.** d
0c30: 65 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73  efined; otherwis
0c40: 65 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20  e, detection of 
0c50: 63 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69  conditions speci
0c60: 66 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c  fic to MinGW wil
0c70: 6c 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64  l be.** disabled
0c80: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0c90: 28 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a  (_HAVE_MINGW_H).
0ca0: 23 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77  # include "mingw
0cb0: 2e 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  .h".#elif define
0cc0: 64 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  d(_HAVE__MINGW_H
0cd0: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69  ).# include "_mi
0ce0: 6e 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f  ngw.h".#endif../
0cf0: 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76  *.** For MinGW v
0d00: 65 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20  ersion 4.x (and 
0d10: 68 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74  higher), check t
0d20: 6f 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53  o see if the _US
0d30: 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a  E_32BIT_TIME_T.*
0d40: 2a 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75  * define is requ
0d50: 69 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e  ired to maintain
0d60: 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62   binary compatib
0d70: 69 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d  ility with the M
0d80: 53 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c  SVC runtime.** l
0d90: 69 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65  ibrary in use (e
0da0: 2e 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20  .g. for Windows 
0db0: 58 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  XP)..*/.#if !def
0dc0: 69 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f  ined(_USE_32BIT_
0dd0: 54 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69  TIME_T) && !defi
0de0: 6e 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54  ned(_USE_64BIT_T
0df0: 49 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20  IME_T) && \.    
0e00: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
0e10: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  && !defined(_WIN
0e20: 36 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66  64) && \.    def
0e30: 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ined(__MINGW_MAJ
0e40: 4f 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f  OR_VERSION) && _
0e50: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0e60: 53 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20  SION >= 4 && \. 
0e70: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56     defined(__MSV
0e80: 43 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  CRT__).# define 
0e90: 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f  _USE_32BIT_TIME_
0ea0: 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  T.#endif../* The
0eb0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69   public SQLite i
0ec0: 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f  nterface.  The _
0ed0: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0ee0: 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65   macro must appe
0ef0: 61 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51  ar.** first in Q
0f00: 4e 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f  NX.  Also, the _
0f10: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f20: 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65   macro must appe
0f30: 61 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20  ar first for.** 
0f40: 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  MinGW..*/.#inclu
0f50: 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a  de "sqlite3.h"..
0f60: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68  /*.** Include th
0f70: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
0f80: 68 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79  header output by
0f90: 20 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20   'configure' if 
0fa0: 77 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a  we're using the.
0fb0: 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65  ** autoconf-base
0fc0: 64 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65  d build.*/.#ifde
0fd0: 66 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43  f _HAVE_SQLITE_C
0fe0: 4f 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65  ONFIG_H.#include
0ff0: 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64   "config.h".#end
1000: 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  if..#include "sq
1010: 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a  liteLimit.h"../*
1020: 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63   Disable nuisanc
1030: 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f  e warnings on Bo
1040: 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20  rland compilers 
1050: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1060: 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72  _BORLANDC__).#pr
1070: 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f  agma warn -rch /
1080: 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  * unreachable co
1090: 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  de */.#pragma wa
10a0: 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69  rn -ccc /* Condi
10b0: 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74  tion is always t
10c0: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a  rue or false */.
10d0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75  #pragma warn -au
10e0: 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61  s /* Assigned va
10f0: 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65  lue is never use
1100: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
1110: 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72  n -csu /* Compar
1120: 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75  ing signed and u
1130: 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67  nsigned */.#prag
1140: 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20  ma warn -spa /* 
1150: 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74  Suspicious point
1160: 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f  er arithmetic */
1170: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
1180: 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20  nclude standard 
1190: 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73 20  header files as 
11a0: 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66  necessary.*/.#if
11b0: 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f  def HAVE_STDINT_
11c0: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  H.#include <stdi
11d0: 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  nt.h>.#endif.#if
11e0: 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45  def HAVE_INTTYPE
11f0: 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e  S_H.#include <in
1200: 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66  ttypes.h>.#endif
1210: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1220: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
1230: 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f   used to cast po
1240: 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65  inters to intege
1250: 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65  rs and.** intege
1260: 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20  rs to pointers. 
1270: 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20   The way you do 
1280: 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d  this varies from
1290: 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a   one compiler.**
12a0: 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f   to the next, so
12b0: 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70   we have develop
12c0: 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ed the following
12d0: 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61 74   set of #if stat
12e0: 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e  ements.** to gen
12f0: 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61 74  erate appropriat
1300: 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77  e macros for a w
1310: 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d  ide range of com
1320: 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  pilers..**.** Th
1330: 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22  e correct "ANSI"
1340: 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20   way to do this 
1350: 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e  is to use the in
1360: 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a  tptr_t type. .**
1370: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1380: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1390: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
13a0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
13b0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
13c0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
13d0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
13e0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
13f0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1400: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1410: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1420: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1430: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1440: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1450: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1460: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1470: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1480: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1490: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
14a0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
14b0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
14c0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
14d0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
14e0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
14f0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1500: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1510: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1520: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1530: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1540: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1550: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1560: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1570: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1580: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1590: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15a0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
15b0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
15c0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
15d0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
15e0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
15f0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
1600: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
1610: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1620: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1630: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1640: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
1650: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
1660: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
1670: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
1680: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
1690: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
16a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
16b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
16c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
16d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
16e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
16f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
1700: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1710: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1720: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
1730: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1750: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
1760: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
1770: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
1780: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1790: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
17a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
17b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
17c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
17d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
17e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
17f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
1800: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
1810: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
1820: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
1830: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
1840: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
1850: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
1860: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
1870: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
1880: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
1890: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
18a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
18b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
18c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
18d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
18e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
18f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
1900: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
1910: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61  TE_THREADSAFE ma
1920: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1930: 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20  ned as 0, 1, or 
1940: 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75  2..** 0 means mu
1950: 74 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e  texes are perman
1960: 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e  ently disable an
1970: 64 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  d the library is
1980: 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64   never.** thread
1990: 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74  safe.  1 means t
19a0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65  he library is se
19b0: 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69  rialized which i
19c0: 73 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a  s the highest.**
19d0: 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64   level of thread
19e0: 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73  safety.  2 means
19f0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1a00: 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20  multithreaded - 
1a10: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65  multiple.** thre
1a20: 61 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69  ads can use SQLi
1a30: 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f  te as long as no
1a40: 20 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79   two threads try
1a50: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
1a60: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
1a70: 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73  nection at the s
1a80: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ame time..**.** 
1a90: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
1aa0: 66 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e  f SQLite used an
1ab0: 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44   optional THREAD
1ac0: 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57  SAFE macro..** W
1ad0: 65 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66  e support that f
1ae0: 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69  or legacy..*/.#i
1af0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1b00: 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  E_THREADSAFE).# 
1b10: 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41  if defined(THREA
1b20: 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e  DSAFE).#   defin
1b30: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
1b40: 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a 23  AFE THREADSAFE.#
1b50: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
1b60: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
1b70: 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30  FE 1 /* IMP: R-0
1b80: 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20  7272-22309 */.# 
1b90: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1ba0: 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76  .** Powersafe ov
1bb0: 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79  erwrite is on by
1bc0: 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63   default.  But c
1bd0: 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66  an be turned off
1be0: 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44   using.** the -D
1bf0: 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45  SQLITE_POWERSAFE
1c00: 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d  _OVERWRITE=0 com
1c10: 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
1c20: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
1c30: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1c40: 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65  ERWRITE.# define
1c50: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
1c60: 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65  E_OVERWRITE 1.#e
1c70: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44  ndif../*.** EVID
1c80: 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31 35  ENCE-OF: R-25715
1c90: 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61 6c  -37072 Memory al
1ca0: 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74  location statist
1cb0: 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  ics are enabled 
1cc0: 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75 6e  by.** default un
1cd0: 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 63  less SQLite is c
1ce0: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
1cf0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
1d00: 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77 68  TATUS=0 in.** wh
1d10: 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79 20  ich case memory 
1d20: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69  allocation stati
1d30: 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62 6c  stics are disabl
1d40: 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 2a  ed by default..*
1d50: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1d60: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45  QLITE_DEFAULT_ME
1d70: 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e  MSTATUS).# defin
1d80: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
1d90: 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e  _MEMSTATUS 1.#en
1da0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74  dif../*.** Exact
1db0: 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ly one of the fo
1dc0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
1dd0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69  ust be defined i
1de0: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70  n order to.** sp
1df0: 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f  ecify which memo
1e00: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75  ry allocation su
1e10: 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a  bsystem to use..
1e20: 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  **.**     SQLITE
1e30: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20  _SYSTEM_MALLOC  
1e40: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e          // Use n
1e50: 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c  ormal system mal
1e60: 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c  loc().**     SQL
1e70: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
1e90: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
1ea0: 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  eap API.**     S
1eb0: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
1ec0: 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  C            // 
1ed0: 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63  Use a stub alloc
1ee0: 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73  ator that always
1ef0: 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51   fails.**     SQ
1f00: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20  LITE_MEMDEBUG   
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44              // D
1f20: 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e  ebugging version
1f30: 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f   of system mallo
1f40: 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e  c().**.** On Win
1f50: 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c  dows, if the SQL
1f60: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1f70: 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20  _VALIDATE macro 
1f80: 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74  is defined and t
1f90: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d  he.** assert() m
1fa0: 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c  acro is enabled,
1fb0: 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20   each call into 
1fc0: 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  the Win32 native
1fd0: 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a   heap subsystem.
1fe0: 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65  ** will cause He
1ff0: 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65  apValidate to be
2000: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61   called.  If hea
2010: 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f  p validation sho
2020: 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20  uld fail, an.** 
2030: 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62  assertion will b
2040: 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a  e triggered..**.
2050: 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ** If none of th
2060: 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69  e above are defi
2070: 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51  ned, then set SQ
2080: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2090: 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66  OC as.** the def
20a0: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ault..*/.#if def
20b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
20c0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
20d0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
20e0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
20f0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2100: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
2110: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2120: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31  LITE_MEMDEBUG)>1
2130: 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72  .# error "Two or
2140: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c   more of the fol
2150: 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74  lowing compile-t
2160: 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
2170: 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20  n options\. are 
2180: 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d  defined but at m
2190: 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77  ost one is allow
21a0: 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53  ed:\. SQLITE_SYS
21b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  TEM_MALLOC, SQLI
21c0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c  TE_WIN32_MALLOC,
21d0: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
21e0: 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ,\. SQLITE_ZERO_
21f0: 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23  MALLOC".#endif.#
2200: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2210: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
2220: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2230: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
2240: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2250: 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41  d(SQLITE_ZERO_MA
2260: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2270: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45  ned(SQLITE_MEMDE
2280: 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65  BUG)==0.# define
2290: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
22a0: 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a  ALLOC 1.#endif..
22b0: 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  /*.** If SQLITE_
22c0: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
22d0: 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  T is not zero, t
22e0: 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20  hen try to keep 
22f0: 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20  the.** sizes of 
2300: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2310: 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61  ns below this va
2320: 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62  lue where possib
2330: 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  le..*/.#if !defi
2340: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f  ned(SQLITE_MALLO
2350: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20  C_SOFT_LIMIT).# 
2360: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
2370: 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20  LLOC_SOFT_LIMIT 
2380: 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1024.#endif../*.
2390: 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  ** We need to de
23a0: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
23b0: 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e  CE as follows in
23c0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65   order to enable
23d0: 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75  .** recursive mu
23e0: 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e  texes on most Un
23f0: 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66  ix systems and f
2400: 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42  chmod() on OpenB
2410: 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45  SD..** But _XOPE
2420: 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20  N_SOURCE define 
2430: 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20  causes problems 
2440: 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f  for Mac OS X, so
2450: 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a   omit.** it..*/.
2460: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f  #if !defined(_XO
2470: 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21  PEN_SOURCE) && !
2480: 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e  defined(__DARWIN
2490: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
24a0: 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65  __APPLE__).#  de
24b0: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
24c0: 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f  CE 600.#endif../
24d0: 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20  *.** NDEBUG and 
24e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65  SQLITE_DEBUG are
24f0: 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20   opposites.  It 
2500: 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65  should always be
2510: 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65   true that.** de
2520: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21  fined(NDEBUG)==!
2530: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2540: 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20  EBUG).  If this 
2550: 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2560: 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69   true,.** make i
2570: 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69  t true by defini
2580: 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67  ng or undefining
2590: 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53   NDEBUG..**.** S
25a0: 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61  etting NDEBUG ma
25b0: 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61  kes the code sma
25c0: 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20  ller and faster 
25d0: 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  by disabling the
25e0: 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61  .** assert() sta
25f0: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
2600: 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74  ode.  So we want
2610: 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
2620: 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72  ion.** to be for
2630: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65   NDEBUG to be se
2640: 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20  t and NDEBUG to 
2650: 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c  be undefined onl
2660: 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  y if SQLITE_DEBU
2670: 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68  G.** is set.  Th
2680: 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65  us NDEBUG become
2690: 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68  s an opt-in rath
26a0: 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f  er than an opt-o
26b0: 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a  ut.** feature..*
26c0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
26d0: 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e  DEBUG) && !defin
26e0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
26f0: 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55   .# define NDEBU
2700: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
2710: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
2720: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
2730: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
2740: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
2750: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
2760: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
2770: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
2780: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
2790: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
27a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27b0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
27c0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
27d0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
27e0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
27f0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
2800: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
2810: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
2820: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2830: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
2840: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
2850: 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64 6f 69  g.  When .** doi
2860: 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  ng coverage test
2870: 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69  ing, the conditi
2880: 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72  on inside the ar
2890: 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73  gument to.** tes
28a0: 74 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20  tcase() must be 
28b0: 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74  evaluated both t
28c0: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e  rue and false in
28d0: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74   order to.** get
28e0: 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76   full branch cov
28f0: 65 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74  erage.  The test
2900: 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20  case() macro is 
2910: 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68  inserted.** to h
2920: 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75  elp ensure adequ
2930: 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67  ate test coverag
2940: 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72  e in places wher
2950: 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64  e simple.** cond
2960: 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63  ition/decision c
2970: 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65  overage is inade
2980: 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d  quate.  For exam
2990: 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ple, testcase().
29a0: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  ** can be used t
29b0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e  o make sure boun
29c0: 64 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20  dary values are 
29d0: 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20  tested.  For.** 
29e0: 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74  bitmask tests, t
29f0: 65 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65  estcase() can be
2a00: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
2a10: 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69  re each bit.** i
2a20: 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e  s significant an
2a30: 64 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20  d used at least 
2a40: 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68  once.  On switch
2a50: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77   statements.** w
2a60: 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61  here multiple ca
2a70: 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61  ses go to the sa
2a80: 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  me block of code
2a90: 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  , testcase().** 
2aa0: 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20  can insure that 
2ab0: 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76  all cases are ev
2ac0: 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23  aluated..**.*/.#
2ad0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56  ifdef SQLITE_COV
2ae0: 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69  ERAGE_TEST.  voi
2af0: 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67  d sqlite3Coverag
2b00: 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  e(int);.# define
2b10: 20 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66   testcase(X)  if
2b20: 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f  ( X ){ sqlite3Co
2b30: 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29  verage(__LINE__)
2b40: 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ; }.#else.# defi
2b50: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23  ne testcase(X).#
2b60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2b70: 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20   TESTONLY macro 
2b80: 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f  is used to enclo
2b90: 73 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  se variable decl
2ba0: 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f  arations or.** o
2bb0: 74 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64  ther bits of cod
2bc0: 65 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65  e that are neede
2bd0: 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  d to support the
2be0: 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69   arguments.** wi
2bf0: 74 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20  thin testcase() 
2c00: 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63  and assert() mac
2c10: 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ros..*/.#if !def
2c20: 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20  ined(NDEBUG) || 
2c30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2c40: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2c50: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2c60: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2c70: 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29  fine TESTONLY(X)
2c80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
2c90: 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64  ometimes we need
2ca0: 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20   a small amount 
2cb0: 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20  of code such as 
2cc0: 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69  a variable initi
2cd0: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20  alization.** to 
2ce0: 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65  setup for a late
2cf0: 72 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  r assert() state
2d00: 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74  ment.  We do not
2d10: 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20   want this code 
2d20: 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65  to.** appear whe
2d30: 6e 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69  n assert() is di
2d40: 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c  sabled.  The fol
2d50: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20  lowing macro is 
2d60: 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65  therefore.** use
2d70: 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61  d to contain tha
2d80: 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54  t setup code.  T
2d90: 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d  he "VVA" acronym
2da0: 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
2db0: 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
2dc0: 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63  lidation, and Ac
2dd0: 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49  creditation".  I
2de0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2df0: 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69  he.** code withi
2e00: 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c  n VVA_ONLY() wil
2e10: 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e  l only run durin
2e20: 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70  g verification p
2e30: 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66  rocesses..*/.#if
2e40: 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65  ndef NDEBUG.# de
2e50: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2e60: 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69    X.#else.# defi
2e70: 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23  ne VVA_ONLY(X).#
2e80: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2e90: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
2ea0: 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e  R macros surroun
2eb0: 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73  d boolean expres
2ec0: 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a 2a 20  sions which .** 
2ed0: 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  are intended to 
2ee0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f  always be true o
2ef0: 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74  r false, respect
2f00: 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20  ively.  Such.** 
2f10: 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c  expressions coul
2f20: 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  d be omitted fro
2f30: 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c  m the code compl
2f40: 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79  etely.  But they
2f50: 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64  .** are included
2f60: 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20   in a few cases 
2f70: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61  in order to enha
2f80: 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e  nce the resilien
2f90: 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20  ce.** of SQLite 
2fa0: 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65  to unexpected be
2fb0: 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65  havior - to make
2fc0: 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d   the code "self-
2fd0: 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22  healing".** or "
2fe0: 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20  ductile" rather 
2ff0: 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74  than being "brit
3000: 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e  tle" and crashin
3010: 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a  g at the first.*
3020: 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e  * hint of unplan
3030: 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a  ned behavior..**
3040: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
3050: 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ds, ALWAYS and N
3060: 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66  EVER are added f
3070: 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64  or defensive cod
3080: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f  e..**.** When do
3090: 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73  ing coverage tes
30a0: 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20  ting ALWAYS and 
30b0: 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63  NEVER are hard-c
30c0: 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72  oded to.** be tr
30d0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20  ue and false so 
30e0: 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68  that the unreach
30f0: 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73  able code they s
3100: 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e  pecify will.** n
3110: 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73  ot be counted as
3120: 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a   untested code..
3130: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3140: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3150: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c  EST).# define AL
3160: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29  WAYS(X)      (1)
3170: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3180: 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c  X)       (0).#el
3190: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
31a0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  UG).# define ALW
31b0: 41 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29  AYS(X)      ((X)
31c0: 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29  ?1:(assert(0),0)
31d0: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
31e0: 28 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28  (X)       ((X)?(
31f0: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
3200: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41  #else.# define A
3210: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58  LWAYS(X)      (X
3220: 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52  ).# define NEVER
3230: 28 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65  (X)       (X).#e
3240: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
3250: 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
3260: 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  o) if the input 
3270: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
3280: 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a  at is too large.
3290: 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d  ** to fit in 32-
32a0: 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72  bits.  This macr
32b0: 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
32c0: 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74   of various test
32d0: 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73  case().** macros
32e0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
32f0: 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53  we have tested S
3300: 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d  QLite for large-
3310: 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f  file support..*/
3320: 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f  .#define IS_BIG_
3330: 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28  INT(X)  (((X)&~(
3340: 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21  i64)0xffffffff)!
3350: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  =0)../*.** The m
3360: 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20  acro unlikely() 
3370: 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73  is a hint that s
3380: 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65  urrounds a boole
3390: 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
33a0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
33b0: 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c   false.  Macro l
33c0: 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64  ikely() surround
33d0: 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65  s.** a boolean e
33e0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
33f0: 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
3400: 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75   These hints cou
3410: 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79  ld,.** in theory
3420: 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  , be used by the
3430: 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e   compiler to gen
3440: 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64  erate better cod
3450: 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e  e, but.** curren
3460: 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73  tly they are jus
3470: 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68  t comments for h
3480: 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f  uman readers..*/
3490: 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28  .#define likely(
34a0: 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e  X)    (X).#defin
34b0: 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28  e unlikely(X)  (
34c0: 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61  X)..#include "ha
34d0: 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  sh.h".#include "
34e0: 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64  parse.h".#includ
34f0: 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63  e <stdio.h>.#inc
3500: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
3510: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
3520: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73  .h>.#include <as
3530: 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  sert.h>.#include
3540: 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a   <stddef.h>../*.
3550: 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20  ** If compiling 
3560: 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20  for a processor 
3570: 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74  that lacks float
3580: 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72  ing point suppor
3590: 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65  t,.** substitute
35a0: 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f   integer for flo
35b0: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23  ating-point.*/.#
35c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
35d0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
35e0: 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65  .# define double
35f0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
3600: 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c  define float sql
3610: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
3620: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
3630: 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  PE sqlite_int64.
3640: 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  # ifndef SQLITE_
3650: 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69  BIG_DBL.#   defi
3660: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
3670: 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74  L (((sqlite3_int
3680: 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64  64)1)<<50).# end
3690: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
36a0: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
36b0: 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e  _FUNCS 1.# defin
36c0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  e SQLITE_OMIT_TR
36d0: 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51  ACE 1.# undef SQ
36e0: 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41  LITE_MIXED_ENDIA
36f0: 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20  N_64BIT_FLOAT.# 
3700: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56  undef SQLITE_HAV
3710: 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23  E_ISNAN.#endif.#
3720: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
3730: 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53  G_DBL.# define S
3740: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31  QLITE_BIG_DBL (1
3750: 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e99).#endif../*.
3760: 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  ** OMIT_TEMPDB i
3770: 73 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51  s set to 1 if SQ
3780: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3790: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20   is defined, or 
37a0: 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20  0.** afterward. 
37b0: 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72  Having this macr
37c0: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63  o allows us to c
37d0: 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69  ause the C compi
37e0: 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20  ler .** to omit 
37f0: 63 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d  code used by TEM
3800: 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74  P tables without
3810: 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73   messy #ifndef s
3820: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69  tatements..*/.#i
3830: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
3840: 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20  _TEMPDB.#define 
3850: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65  OMIT_TEMPDB 1.#e
3860: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  lse.#define OMIT
3870: 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66  _TEMPDB 0.#endif
3880: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c  ../*.** The "fil
3890: 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72  e format" number
38a0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
38b0: 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  hat is increment
38c0: 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74  ed whenever.** t
38d0: 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69  he VDBE-level fi
38e0: 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65  le format change
38f0: 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  s.  The followin
3900: 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20  g macros define 
3910: 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75  the.** the defau
3920: 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66  lt file format f
3930: 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  or new databases
3940: 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d   and the maximum
3950: 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20   file format.** 
3960: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
3970: 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64   can read..*/.#d
3980: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
3990: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
39a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
39b0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
39c0: 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  T.# define SQLIT
39d0: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
39e0: 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a  ORMAT 4.#endif..
39f0: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
3a00: 77 68 65 74 68 65 72 20 74 72 69 67 67 65 72 73  whether triggers
3a10: 20 61 72 65 20 72 65 63 75 72 73 69 76 65 20 62   are recursive b
3a20: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73  y default.  This
3a30: 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67   can be.** chang
3a40: 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75  ed at run-time u
3a50: 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a  sing a pragma..*
3a60: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3a70: 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49  _DEFAULT_RECURSI
3a80: 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65  VE_TRIGGERS.# de
3a90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
3aa0: 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52  ULT_RECURSIVE_TR
3ab0: 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a  IGGERS 0.#endif.
3ac0: 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61  ./*.** Provide a
3ad0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
3ae0: 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  or SQLITE_TEMP_S
3af0: 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74 20  TORE in case it 
3b00: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
3b10: 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  .** on the comma
3b20: 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64  nd-line.*/.#ifnd
3b30: 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ef SQLITE_TEMP_S
3b40: 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51  TORE.# define SQ
3b50: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20  LITE_TEMP_STORE 
3b60: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
3b70: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20  E_TEMP_STORE_xc 
3b80: 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72  1  /* Exclude fr
3b90: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
3ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
3bb0: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
3bc0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
3bd0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3be0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
3bf0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
3c00: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
3c10: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
3c20: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
3c30: 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e   it .** to zero.
3c40: 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54  .*/.#if SQLITE_T
3c50: 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20  EMP_STORE==3 || 
3c60: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
3c70: 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c  E==0.# undef SQL
3c80: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3c90: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3ca0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3cb0: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
3cc0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3cd0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3ce0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
3cf0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3d00: 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66  THREADS 8.#endif
3d10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3d20: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3d30: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3d40: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
3d50: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
3d60: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
3d70: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3d80: 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f  _THREADS>SQLITE_
3d90: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3da0: 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  DS.# undef SQLIT
3db0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3dc0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
3dd0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3de0: 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44  THREADS SQLITE_D
3df0: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
3e00: 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 0a 2f  READS.#endif.../
3e10: 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f  *.** GCC does no
3e20: 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66  t define the off
3e30: 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f  setof() macro so
3e40: 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64   we'll have to d
3e50: 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65  o it.** ourselve
3e60: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66  s..*/.#ifndef of
3e70: 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f  fsetof.#define o
3e80: 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52  ffsetof(STRUCTUR
3e90: 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28  E,FIELD) ((int)(
3ea0: 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54  (char*)&((STRUCT
3eb0: 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29  URE*)0)->FIELD))
3ec0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
3ed0: 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65  acros to compute
3ee0: 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78   minimum and max
3ef0: 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62  imum of two numb
3f00: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
3f10: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
3f20: 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69  )?(A):(B)).#defi
3f30: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
3f40: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f  >(B)?(A):(B))../
3f50: 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62  *.** Swap two ob
3f60: 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 54 59  jects of type TY
3f70: 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  PE..*/.#define S
3f80: 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54  WAP(TYPE,A,B) {T
3f90: 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d  YPE t=A; A=B; B=
3fa0: 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  t;}../*.** Check
3fb0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20   to see if this 
3fc0: 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43  machine uses EBC
3fd0: 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69  DIC.  (Yes, beli
3fe0: 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74  eve it or.** not
3ff0: 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  , there are stil
4000: 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74  l machines out t
4010: 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42  here that use EB
4020: 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41  CDIC.).*/.#if 'A
4030: 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65  ' == '\301'.# de
4040: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44  fine SQLITE_EBCD
4050: 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  IC 1.#else.# def
4060: 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49  ine SQLITE_ASCII
4070: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
4080: 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f   Integers of kno
4090: 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65  wn sizes.  These
40a0: 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20   typedefs might 
40b0: 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69  change for archi
40c0: 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72  tectures.** wher
40d0: 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79  e the sizes very
40e0: 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20  .  Preprocessor 
40f0: 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c  macros are avail
4100: 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65  able so that the
4110: 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65  .** types can be
4120: 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65   conveniently re
4130: 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  defined at compi
4140: 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74  le-type.  Like t
4150: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  his:.**.**      
4160: 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52     cc '-DUINTPTR
4170: 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20  _TYPE=long long 
4180: 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e  int' ....*/.#ifn
4190: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a  def UINT32_TYPE.
41a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
41b0: 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T32_T.#  define 
41c0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74  UINT32_TYPE uint
41d0: 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  32_t.# else.#  d
41e0: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
41f0: 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23  E unsigned int.#
4200: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4210: 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  fndef UINT16_TYP
4220: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
4230: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
4240: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69  e UINT16_TYPE ui
4250: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4260: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
4270: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
4280: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
4290: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
42a0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
42b0: 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20   HAVE_INT16_T.# 
42c0: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
42d0: 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  PE int16_t.# els
42e0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  e.#  define INT1
42f0: 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74  6_TYPE short int
4300: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
4310: 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59  #ifndef UINT8_TY
4320: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4330: 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  UINT8_T.#  defin
4340: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e  e UINT8_TYPE uin
4350: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
4360: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4370: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
4380: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4390: 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a  fndef INT8_TYPE.
43a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
43b0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  8_T.#  define IN
43c0: 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23  T8_TYPE int8_t.#
43d0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
43e0: 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64  INT8_TYPE signed
43f0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
4400: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e  ndif.#ifndef LON
4410: 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64  GDOUBLE_TYPE.# d
4420: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
4430: 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c  _TYPE long doubl
4440: 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66  e.#endif.typedef
4450: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
4460: 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38  4;          /* 8
4470: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
4480: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
4490: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36  sqlite_uint64 u6
44a0: 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  4;         /* 8-
44b0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
44c0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
44d0: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32   UINT32_TYPE u32
44e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34  ;           /* 4
44f0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
4500: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4510: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31  f UINT16_TYPE u1
4520: 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  6;           /* 
4530: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
4540: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4550: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31  ef INT16_TYPE i1
4560: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  6;            /*
4570: 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
4580: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4590: 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b  f UINT8_TYPE u8;
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
45b0: 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  1-byte unsigned 
45c0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
45d0: 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b  ef INT8_TYPE i8;
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
45f0: 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
4600: 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nteger */../*.**
4610: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
4620: 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e  is a u64 constan
4630: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61  t that is the ma
4640: 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a  ximum u64 value.
4650: 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  ** that can be s
4660: 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77  tored in a u32 w
4670: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64  ithout loss of d
4680: 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  ata.  The value.
4690: 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30  ** is 0x00000000
46a0: 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62  ffffffff.  But b
46b0: 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73  ecause of quirks
46c0: 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65   of some compile
46d0: 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74  rs, we.** have t
46e0: 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  o specify the va
46f0: 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20  lue in the less 
4700: 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72  intuitive manner
4710: 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69   shown:.*/.#defi
4720: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ne SQLITE_MAX_U3
4730: 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33  2  ((((u64)1)<<3
4740: 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  2)-1)../*.** The
4750: 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74   datatype used t
4760: 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65  o store estimate
4770: 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  s of the number 
4780: 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20  of rows in a.** 
4790: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
47a0: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69   This is an unsi
47b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70  gned integer typ
47c0: 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66  e.  For 99.9% of
47d0: 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61  .** the world, a
47e0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
47f0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20  is sufficient.  
4800: 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74  But a 64-bit int
4810: 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75  eger.** can be u
4820: 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  sed at compile-t
4830: 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a  ime if desired..
4840: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4850: 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79  _64BIT_STATS. ty
4860: 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e  pedef u64 tRowcn
4870: 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20  t;    /* 64-bit 
4880: 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65  only if requeste
4890: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
48a0: 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65  e */.#else. type
48b0: 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b  def u32 tRowcnt;
48c0: 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73      /* 32-bit is
48d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
48e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73  #endif../*.** Es
48f0: 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69  timated quantiti
4900: 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72  es used for quer
4910: 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73  y planning are s
4920: 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a  tored as 16-bit.
4930: 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20  ** logarithms.  
4940: 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20  For quantity X, 
4950: 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
4960: 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20   is 10*log2(X). 
4970: 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61   This.** gives a
4980: 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20   possible range 
4990: 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70  of values of app
49a0: 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39  roximately 1.0e9
49b0: 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a  86 to 1e-986..**
49c0: 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64   But the allowed
49d0: 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61   values are "gra
49e0: 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79  iny".  Not every
49f0: 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73   value is repres
4a00: 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  entable..** For 
4a10: 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74  example, quantit
4a20: 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72  ies 16 and 17 ar
4a30: 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74  e both represent
4a40: 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a  ed by a LogEst.*
4a50: 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65  * of 40.  Howeve
4a60: 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20  r, since LogEst 
4a70: 71 75 61 6e 74 69 74 69 65 73 20 61 72 65 20 73  quantities are s
4a80: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
4a90: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
4aa0: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
4ab0: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
4ac0: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
4ad0: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
4ae0: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
4af0: 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74  arithmic Estimat
4b00: 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  e"..**.** Exampl
4b10: 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e  es:.**      1 ->
4b20: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
4b30: 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20  20 -> 43        
4b40: 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a    10000 -> 132.*
4b50: 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20  *      2 -> 10  
4b60: 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e             25 ->
4b70: 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35 30   46          250
4b80: 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20  00 -> 146.**    
4b90: 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20    3 -> 16       
4ba0: 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20       100 -> 66  
4bb0: 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e        1000000 ->
4bc0: 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d   199.**      4 -
4bd0: 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20 31  > 20           1
4be0: 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20  000 -> 99       
4bf0: 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a   1048576 -> 200.
4c00: 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20  **     10 -> 33 
4c10: 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20 2d            1024 -
4c20: 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36 37  > 100    4294967
4c30: 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a  296 -> 320.**.**
4c40: 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20   The LogEst can 
4c50: 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69  be negative to i
4c60: 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e  ndicate fraction
4c70: 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20 45  al values. .** E
4c80: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4c90: 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20    0.5 -> -10    
4ca0: 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33         0.1 -> -3
4cb0: 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35 20  3        0.0625 
4cc0: 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65  -> -40.*/.typede
4cd0: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67  f INT16_TYPE Log
4ce0: 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  Est;../*.** Macr
4cf0: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
4d00: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
4d10: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
4d20: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
4d30: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
4d40: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
4d50: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
4d60: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
4d70: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
4d80: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
4d90: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
4da0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
4db0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
4dc0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
4dd0: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
4de0: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
4df0: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
4e00: 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  -DSQLITE_RUNTIME
4e10: 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20  _BYTEORDER=1 is 
4e20: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
4e30: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
4e40: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
4e50: 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
4e60: 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
4e70: 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74  .const int sqlit
4e80: 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65  e3one = 1;.#else
4e90: 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e  .extern const in
4ea0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65  t sqlite3one;.#e
4eb0: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
4ec0: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
4ed0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
4ee0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
4ef0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
4f00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
4f10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
4f20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
4f30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
4f40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
4f50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
4f60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
4f70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
4f80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
4f90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
4fa0: 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65  __arm__)) && !de
4fb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
4fc0: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
4fd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4fe0: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
4ff0: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
5000: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
5010: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5020: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
5030: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5040: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
5050: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64  ITE_UTF16LE.#end
5060: 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28  if.#if (defined(
5070: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
5080: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20  ined(__ppc__))  
5090: 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65  \.    && !define
50a0: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
50b0: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
50c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
50d0: 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20  ORDER    4321.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
50f0: 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64  GENDIAN    1.# d
5100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
5110: 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65  TLEENDIAN 0.# de
5120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
5130: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
5140: 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23  UTF16BE.#endif.#
5150: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
5160: 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  TE_BYTEORDER).# 
5170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
5180: 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20 20  TEORDER    0    
5190: 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b   /* 0 means "unk
51a0: 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d  nown at compile-
51b0: 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e  time" */.# defin
51c0: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
51d0: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
51e0: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
51f0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5200: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
5210: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
5220: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
5230: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5240: 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f  NATIVE  (SQLITE_
5250: 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45  BIGENDIAN?SQLITE
5260: 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f  _UTF16BE:SQLITE_
5270: 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a  UTF16LE).#endif.
5280: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73  ./*.** Constants
5290: 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74   for the largest
52a0: 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f   and smallest po
52b0: 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69  ssible 64-bit si
52c0: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a  gned integers..*
52d0: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61  * These macros a
52e0: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77  re designed to w
52f0: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
5300: 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
5310: 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69   64-bit.** compi
5320: 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lers..*/.#define
5330: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20   LARGEST_INT64  
5340: 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69  (0xffffffff|(((i
5350: 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
5360: 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41  32)).#define SMA
5370: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69  LLEST_INT64 (((i
5380: 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54  64)-1) - LARGEST
5390: 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20  _INT64)../* .** 
53a0: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
53b0: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
53c0: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
53d0: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
53e0: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
53f0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
5400: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
5410: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
5420: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
5430: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
5440: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
5450: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
5460: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
5470: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
5480: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
5490: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
54a0: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
54b0: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
54c0: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
54d0: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
54e0: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
54f0: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
5500: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
5510: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
5520: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
5530: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
5540: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
5550: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
5560: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
5570: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
5580: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
5590: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
55a0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
55b0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
55c0: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
55d0: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
55e0: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
55f0: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
5600: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
5610: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
5620: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
5630: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
5640: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
5650: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
5660: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
5670: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
5680: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
5690: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
56a0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
56b0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
56c0: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
56d0: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
56e0: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
56f0: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
5700: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
5710: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
5720: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
5730: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
5740: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5750: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5760: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
5770: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
5780: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
5790: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
57a0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
57b0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
57c0: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
57d0: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
57e0: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
57f0: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
5800: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
5810: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
5820: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
5830: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5840: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
5850: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5860: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
5870: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
5880: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
5890: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
58a0: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
58b0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
58c0: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
58d0: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
58e0: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
58f0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5900: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5910: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
5920: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
5930: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
5940: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5950: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
5960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5970: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
5980: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
5990: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
59a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
59b0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
59c0: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
59d0: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
59e0: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
59f0: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
5a00: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
5a10: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
5a20: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
5a30: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
5a40: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
5a50: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
5a60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5a70: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
5a80: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
5a90: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5aa0: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
5ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
5ac0: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
5ad0: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
5ae0: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
5af0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
5b00: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
5b10: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5b20: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
5b30: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
5b40: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
5b50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5b60: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
5b70: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
5b80: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
5b90: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
5ba0: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
5bb0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
5bc0: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
5bd0: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
5be0: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
5bf0: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
5c00: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
5c10: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
5c20: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
5c30: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
5c40: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5c50: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
5c60: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
5c70: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
5c80: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
5c90: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
5ca0: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
5cb0: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
5cc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5cd0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5ce0: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
5cf0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5d00: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
5d10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5d20: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
5d30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
5d40: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
5d50: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
5d60: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
5d70: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
5d80: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
5d90: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
5da0: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
5db0: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
5dc0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5dd0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
5de0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5df0: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
5e00: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
5e10: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
5e20: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
5e30: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
5e40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
5e50: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
5e60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5e70: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
5e80: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
5e90: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
5ea0: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
5eb0: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a  sqlite handle. .
5ec0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
5ed0: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
5ee0: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
5ef0: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
5f00: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
5f10: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
5f20: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
5f30: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
5f40: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
5f50: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
5f60: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
5f70: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
5f80: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
5f90: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
5fa0: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
5fb0: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
5fc0: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
5fd0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
5fe0: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
5ff0: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
6000: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
6010: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
6020: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
6030: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
6040: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
6050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
6060: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
6070: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
6080: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
6090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
60a0: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
60b0: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
60c0: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
60d0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
60e0: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
60f0: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
6100: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
6110: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
6120: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
6130: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
6140: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
6150: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
6160: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
6170: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
6180: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
6190: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
61a0: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
61b0: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
61c0: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
61d0: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
61e0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
61f0: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
6200: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
6210: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
6220: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
6230: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
6240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
6250: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
6260: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
6270: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
6280: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
6290: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
62a0: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
62b0: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
62c0: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
62d0: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
62e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
62f0: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
6300: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
6310: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
6320: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20  ** Determine if 
6330: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
6340: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a  a power of two.*
6350: 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65  /.#define IsPowe
6360: 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26  rOfTwo(X) (((X)&
6370: 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a  ((X)-1))==0)../*
6380: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
6390: 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73  g value as a des
63a0: 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f  tructor means to
63b0: 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72   use sqlite3DbFr
63c0: 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  ee()..** The sql
63d0: 69 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75  ite3DbFree() rou
63e0: 74 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77  tine requires tw
63f0: 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73  o parameters ins
6400: 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20  tead of the .** 
6410: 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74 68  one parameter th
6420: 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e  at destructors n
6430: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53  ormally want.  S
6440: 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74  o we have to int
6450: 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69 73 20  roduce .** this 
6460: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
6470: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
6480: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
6490: 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20  ently.  Any .** 
64a0: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
64b0: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
64c0: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
64d0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
64e0: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
64f0: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
6500: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
6510: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
6520: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
6530: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
6540: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
6550: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
6560: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
6570: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
6580: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
6590: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
65a0: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
65b0: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
65c0: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
65d0: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
65e0: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
65f0: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
6600: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
6610: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
6620: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
6630: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
6640: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
6650: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
6660: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
6670: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
6680: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
6690: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
66a0: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
66b0: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
66c0: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
66d0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
66e0: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
66f0: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
6700: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
6710: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
6720: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
6730: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
6740: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
6750: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
6760: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
6770: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
6780: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
6790: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
67a0: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
67b0: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
67c0: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
67d0: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
67e0: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
67f0: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
6800: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
6810: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
6820: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
6830: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
6840: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
6850: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
6860: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
6870: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
6880: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
6890: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
68a0: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
68b0: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
68c0: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
68d0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
68e0: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
68f0: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
6900: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
6910: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
6920: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
6930: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
6940: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
6950: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
6960: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
6970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
6980: 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  D .  #define GLO
6990: 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65  BAL(t,v) v.  #de
69a0: 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62  fine sqlite3Glob
69b0: 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  alConfig sqlite3
69c0: 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f  Config.#endif../
69d0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
69e0: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
69f0: 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63  ed to suppress c
6a00: 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73  ompiler warnings
6a10: 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20   and to.** make 
6a20: 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61  it clear to huma
6a30: 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61  n readers when a
6a40: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
6a50: 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74  ter is deliberat
6a60: 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  ely .** left unu
6a70: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
6a80: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
6a90: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
6aa0: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
6ab0: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
6ac0: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
6ad0: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
6ae0: 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a   example the .**
6af0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6b00: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
6b10: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
6b20: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
6b30: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
6b40: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
6b50: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
6b60: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
6b70: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
6b80: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
6b90: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
6ba0: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
6bb0: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
6bc0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
6bd0: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
6be0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
6bf0: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
6c00: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
6c10: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
6c20: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
6c30: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
6c40: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
6c50: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
6c60: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
6c70: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
6c80: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
6c90: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
6ca0: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
6cb0: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
6cc0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
6cd0: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
6ce0: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
6cf0: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
6d00: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
6d10: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
6d20: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
6d30: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
6d40: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
6d50: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
6d60: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
6d70: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
6d80: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
6d90: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
6da0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
6db0: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
6dc0: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
6dd0: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
6de0: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
6df0: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
6e00: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
6e10: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
6e20: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
6e30: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
6e40: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
6e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
6e60: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
6e70: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
6e80: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
6e90: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
6ea0: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
6eb0: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
6ec0: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
6ed0: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
6ee0: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
6ef0: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
6f00: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
6f10: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
6f20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f30: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
6f40: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6f50: 74 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53  t ExprSpan ExprS
6f60: 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  pan;.typedef str
6f70: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
6f80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6f90: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
6fa0: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
6fb0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
6fc0: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
6fd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
6fe0: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
6ff0: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
7000: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
7010: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7020: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
7030: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
7040: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
7050: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
7060: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
7070: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
7080: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
7090: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
70a0: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
70b0: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
70c0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
70d0: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
70e0: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
70f0: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
7100: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
7110: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
7120: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
7130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
7140: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
7150: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
7160: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
7170: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
7180: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
7190: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
71a0: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
71b0: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
71c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
71d0: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
71e0: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
71f0: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
7200: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
7210: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
7220: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
7230: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
7240: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
7250: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
7260: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
7270: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7280: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
7290: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
72a0: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
72b0: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
72c0: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
72d0: 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77   struct TreeView
72e0: 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64   TreeView;.typed
72f0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
7300: 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64  r Trigger;.typed
7310: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
7320: 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b  rPrg TriggerPrg;
7330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7340: 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67  TriggerStep Trig
7350: 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66  gerStep;.typedef
7360: 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64   struct Unpacked
7370: 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52  Record UnpackedR
7380: 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73  ecord;.typedef s
7390: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
73a0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
73b0: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
73c0: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
73d0: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
73e0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
73f0: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
7400: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
7410: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
7420: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f  ../*.** Defer so
7430: 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e  urcing vdbe.h an
7440: 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20  d btree.h until 
7450: 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61  after the "u8" a
7460: 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  nd .** "BusyHand
7470: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
7480: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
7490: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
74a0: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
74b0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
74c0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
74d0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
74e0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
74f0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
7500: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
7510: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
7520: 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20  he.h"..#include 
7530: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
7540: 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a  "mutex.h".../*.*
7550: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
7560: 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73  file to be acces
7570: 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  sed by the syste
7580: 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  m is an instance
7590: 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  .** of the follo
75a0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20  wing structure. 
75b0: 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61   There are norma
75c0: 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65  lly two of these
75d0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69   structures.** i
75e0: 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62  n the sqlite.aDb
75f0: 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30  [] array.  aDb[0
7600: 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  ] is the main da
7610: 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a  tabase file and.
7620: 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65  ** aDb[1] is the
7630: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
7640: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70  sed to hold temp
7650: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41  orary tables.  A
7660: 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74  dditional.** dat
7670: 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61 74  abases may be at
7680: 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  tached..*/.struc
7690: 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a  t Db {.  char *z
76a0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
76b0: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61   Name of this da
76c0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65  tabase */.  Btre
76d0: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
76e0: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
76f0: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
7700: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
7710: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
7720: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
7730: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
7740: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
7750: 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  isk */.  Schema 
7760: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
7770: 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61   Pointer to data
7780: 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73  base schema (pos
7790: 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f  sibly shared) */
77a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
77b0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
77c0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
77d0: 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62  e stores a datab
77e0: 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
77f0: 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62  * Most Schema ob
7800: 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69  jects are associ
7810: 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65  ated with a Btre
7820: 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f  e.  The exceptio
7830: 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65  n is.** the Sche
7840: 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20  ma for the TEMP 
7850: 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65  databaes (sqlite
7860: 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20  3.aDb[1]) which 
7870: 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67  is free-standing
7880: 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63  ..** In shared c
7890: 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e  ache mode, a sin
78a0: 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  gle Schema objec
78b0: 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20  t can be shared 
78c0: 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42  by multiple.** B
78d0: 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72  trees that refer
78e0: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64   to the same und
78f0: 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64  erlying BtShared
7900: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20   object..** .** 
7910: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
7920: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
7930: 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65   deallocated whe
7940: 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65  n the last Btree
7950: 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e   that.** referen
7960: 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74  ces them is dest
7970: 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d  royed.   The TEM
7980: 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75  P Schema is manu
7990: 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a  ally freed by.**
79a0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29   sqlite3_close()
79b0: 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20  ..*.** A thread 
79c0: 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20  must be holding 
79d0: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63  a mutex on the c
79e0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72  orresponding Btr
79f0: 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  ee in order.** t
7a00: 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20  o access Schema 
7a10: 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69  content.  This i
7a20: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
7a30: 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f  thread must also
7a40: 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61   be.** holding a
7a50: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71   mutex on the sq
7a60: 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e  lite3 connection
7a70: 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77   pointer that ow
7a80: 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a  ns the Btree..**
7a90: 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65   For a TEMP Sche
7aa0: 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e  ma, only the con
7ab0: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73  nection mutex is
7ac0: 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74   required..*/.st
7ad0: 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20  ruct Schema {.  
7ae0: 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  int schema_cooki
7af0: 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65  e;   /* Database
7b00: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
7b10: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
7b20: 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47  file */.  int iG
7b30: 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f  eneration;     /
7b40: 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * Generation cou
7b50: 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74  nter.  Increment
7b60: 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61  ed with each cha
7b70: 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62  nge */.  Hash tb
7b80: 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  lHash;        /*
7b90: 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65   All tables inde
7ba0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
7bb0: 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20   Hash idxHash;  
7bc0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61        /* All (na
7bd0: 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64  med) indices ind
7be0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
7bf0: 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b    Hash trigHash;
7c00: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72         /* All tr
7c10: 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62  iggers indexed b
7c20: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7c30: 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20   fkeyHash;      
7c40: 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20   /* All foreign 
7c50: 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63  keys by referenc
7c60: 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f  ed table name */
7c70: 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61  .  Table *pSeqTa
7c80: 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73  b;      /* The s
7c90: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
7ca0: 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54  able used by AUT
7cb0: 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
7cc0: 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  u8 file_format; 
7cd0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66       /* Schema f
7ce0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f  ormat version fo
7cf0: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
7d00: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
7d10: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
7d20: 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74  coding used by t
7d30: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
7d40: 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67    u16 schemaFlag
7d50: 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20  s;     /* Flags 
7d60: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
7d70: 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
7d80: 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b   int cache_size;
7d90: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7da0: 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20  of pages to use 
7db0: 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a  in the cache */.
7dc0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  };../*.** These 
7dd0: 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
7de0: 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
7df0: 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
7e00: 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63  n the .** Db.pSc
7e10: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
7e20: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62  d..*/.#define Db
7e30: 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  HasProperty(D,I,
7e40: 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44  P)     (((D)->aD
7e50: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
7e60: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d  hemaFlags&(P))==
7e70: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
7e80: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
7e90: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
7ea0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
7eb0: 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30  emaFlags&(P))!=0
7ec0: 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50  ).#define DbSetP
7ed0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7ee0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
7ef0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7f00: 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
7f10: 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79   DbClearProperty
7f20: 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61  (D,I,P)   (D)->a
7f30: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
7f40: 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29  chemaFlags&=~(P)
7f50: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
7f60: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44  values for the D
7f70: 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  B.pSchema->flags
7f80: 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68   field..**.** Th
7f90: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
7fa0: 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66  d flag is set af
7fb0: 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ter the database
7fc0: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7fd0: 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e  .** read into in
7fe0: 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c  ternal hash tabl
7ff0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72  es..**.** DB_Unr
8000: 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20  esetViews means 
8010: 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  that one or more
8020: 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75   views have colu
8030: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a  mn names that.**
8040: 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65   have been fille
8050: 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73  d out.  If the s
8060: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
8070: 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  hese column name
8080: 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67  s might.** chang
8090: 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69  es and so the vi
80a0: 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ew will need to 
80b0: 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65  be reset..*/.#de
80c0: 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f  fine DB_SchemaLo
80d0: 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20  aded    0x0001  
80e0: 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61  /* The schema ha
80f0: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
8100: 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65  .#define DB_Unre
8110: 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30  setViews    0x00
8120: 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77  02  /* Some view
8130: 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63  s have defined c
8140: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23  olumn names */.#
8150: 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20  define DB_Empty 
8160: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34            0x0004
8170: 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73    /* The file is
8180: 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30   empty (length 0
8190: 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a   bytes) */../*.*
81a0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
81b0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
81c0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
81d0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
81e0: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
81f0: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
8200: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
8210: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
8220: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
8230: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
8240: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
8250: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
8260: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
8270: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
8280: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
8290: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
82a0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
82b0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
82c0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
82d0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
82e0: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
82f0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8300: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
8310: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
8320: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
8330: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
8340: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
8350: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
8360: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
8370: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
8380: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
8390: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
83a0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
83b0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
83c0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
83d0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
83e0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
83f0: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
8400: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
8410: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
8420: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
8430: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
8440: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
8450: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
8460: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
8470: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
8480: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
8490: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
84a0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
84b0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
84c0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
84d0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
84e0: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
84f0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8500: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
8510: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
8520: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
8530: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
8540: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
8550: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
8560: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
8570: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
8580: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
8590: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
85a0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
85b0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
85c0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
85d0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
85e0: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
85f0: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
8600: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
8610: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
8620: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
8630: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
8640: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
8650: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
8660: 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20  u16 sz;         
8670: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
8680: 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69  of each buffer i
8690: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20  n bytes */.  u8 
86a0: 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  bEnabled;       
86b0: 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f       /* False to
86c0: 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f   disable new loo
86d0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
86e0: 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c  ns */.  u8 bMall
86f0: 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  oced;           
8700: 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72  /* True if pStar
8710: 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
8720: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
8730: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20   */.  int nOut; 
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8750: 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65   Number of buffe
8760: 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65  rs currently che
8770: 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e  cked out */.  in
8780: 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20  t mxOut;        
8790: 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74        /* Highwat
87a0: 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74  er mark for nOut
87b0: 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74   */.  int anStat
87c0: 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [3];          /*
87d0: 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69   0: hits.  1: si
87e0: 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66  ze misses.  2: f
87f0: 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20  ull misses */.  
8800: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
8810: 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20  Free;   /* List 
8820: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66  of available buf
8830: 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
8840: 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  pStart;         
8850: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
8860: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  of available mem
8870: 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76  ory space */.  v
8880: 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  oid *pEnd;      
8890: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
88a0: 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66  byte past end of
88b0: 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65   available space
88c0: 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f   */.};.struct Lo
88d0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20  okasideSlot {.  
88e0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
88f0: 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74  Next;    /* Next
8900: 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c   buffer in the l
8910: 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66  ist of free buff
8920: 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ers */.};../*.**
8930: 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f   A hash table fo
8940: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
8950: 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61  itions..**.** Ha
8960: 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20  sh each FuncDef 
8970: 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f  structure into o
8980: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
8990: 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e  fHash.a[] slots.
89a0: 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61  .** Collisions a
89b0: 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65  re on the FuncDe
89c0: 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a  f.pHash chain..*
89d0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
89e0: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
89f0: 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f   *a[23];       /
8a00: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
8a10: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
8a20: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
8a30: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
8a40: 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d  ION./*.** Inform
8a50: 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68  ation held in th
8a60: 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61  e "sqlite3" data
8a70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
8a80: 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a  object and used.
8a90: 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65  ** to manage use
8aa0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
8ab0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
8ac0: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
8ad0: 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65  auth sqlite3_use
8ae0: 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71  rauth;.struct sq
8af0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b  lite3_userauth {
8b00: 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b  .  u8 authLevel;
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b20: 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68   /* Current auth
8b30: 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c  entication level
8b40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50   */.  int nAuthP
8b50: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
8b60: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
8b70: 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79  he zAuthPW in by
8b80: 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  tes */.  char *z
8b90: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
8ba0: 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f         /* Passwo
8bb0: 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  rd used to authe
8bc0: 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61  nticate */.  cha
8bd0: 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20  r *zAuthUser;   
8be0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
8bf0: 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20  er name used to 
8c00: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
8c10: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
8c20: 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65  alues for sqlite
8c30: 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c  3_userauth.authL
8c40: 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  evel */.#define 
8c50: 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20  UAUTH_Unknown   
8c60: 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65    0     /* Authe
8c70: 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65  ntication not ye
8c80: 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65  t checked */.#de
8c90: 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20  fine UAUTH_Fail 
8ca0: 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20         1     /* 
8cb0: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
8cc0: 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64  ion failed */.#d
8cd0: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72  efine UAUTH_User
8ce0: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a          2     /*
8cf0: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
8d00: 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20  s a normal user 
8d10: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8d20: 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20  _Admin       3  
8d30: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
8d40: 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69  ted as an admini
8d50: 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46  strator */../* F
8d60: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e  unctions used on
8d70: 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f  ly by user autho
8d80: 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a  rization logic *
8d90: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  /.int sqlite3Use
8da0: 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74  rAuthTable(const
8db0: 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
8dc0: 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63  ite3UserAuthChec
8dd0: 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c  kLogin(sqlite3*,
8de0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29  const char*,u8*)
8df0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73  ;.void sqlite3Us
8e00: 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74  erAuthInit(sqlit
8e10: 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
8e20: 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69  e3CryptFunc(sqli
8e30: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
8e40: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
8e50: 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
8e60: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
8e70: 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a  TICATION */../*.
8e80: 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74  ** typedef for t
8e90: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
8ea0: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
8eb0: 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  on..*/.#ifdef SQ
8ec0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
8ed0: 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64  TICATION.  typed
8ee0: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
8ef0: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
8f00: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
8f10: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8f20: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f40: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
8f50: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
8f60: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
8f70: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
8f80: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
8f90: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8fa0: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8fb0: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29      const char*)
8fe0: 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ;.#endif.../*.**
8ff0: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
9000: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
9010: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
9020: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
9030: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
9040: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
9050: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
9060: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
9070: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
9080: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
9090: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
90a0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
90b0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
90c0: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
90d0: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
90e0: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
90f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
9100: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
9110: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
9120: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
9130: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
9140: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
9150: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9160: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
9170: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
9180: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
9190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
91a0: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
91b0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
91c0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e      /* Miscellan
91f0: 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20  eous flags. See 
9200: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
9210: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
9220: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
9230: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
9240: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
9250: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
9260: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
9270: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
9280: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
9290: 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ing */.  unsigne
92a0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
92b0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
92c0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
92d0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
92e0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9300: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
9310: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
9320: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
9330: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
9340: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
9350: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
9360: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
9370: 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64  rning */.  u16 d
9380: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
9390: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
93a0: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
93b0: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
93c0: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93e0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
93f0: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
9400: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
9410: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
9420: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
9430: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
9440: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
9450: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
9460: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
9470: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
9480: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
9490: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
94a0: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
94b0: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
94c0: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
94d0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
94e0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
94f0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
9500: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
9510: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
9520: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
9530: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
9540: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
9550: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
9560: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
9570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
9580: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
9590: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
95a0: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
95b0: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
95c0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
95d0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
95e0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
95f0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
9600: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
9610: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
9620: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
9630: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
9640: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
9650: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
9660: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
9670: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
9680: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96a0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
96b0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
96c0: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
96d0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96f0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
9700: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
9710: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
9720: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
9730: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
9740: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
9750: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
9760: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
9770: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
9780: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
9790: 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  mits */.  int nM
97a0: 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20  axSorterMmap;   
97b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
97c0: 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f  um size of regio
97d0: 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72  ns mapped by sor
97e0: 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ter */.  struct 
97f0: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
9800: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
9810: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
9820: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
9830: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
9840: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
9850: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
9860: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
9870: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
9880: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
9890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98a0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
98b0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
98c0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
98d0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
98e0: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
98f0: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
9900: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
9910: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
9920: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
9930: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
9940: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
9950: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
9960: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
9970: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
9980: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9990: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
99a0: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
99b0: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
99d0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
99e0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
99f0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
9a00: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9a20: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
9a30: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
9a40: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
9a50: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a70: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
9a80: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
9a90: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
9aa0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
9ab0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9ac0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
9ad0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
9ae0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
9af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
9b00: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
9b10: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
9b20: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
9b30: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
9b40: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
9b50: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
9b60: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
9b70: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9b90: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
9ba0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
9bb0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
9bc0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
9bd0: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
9be0: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
9bf0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
9c00: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c20: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
9c30: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
9c40: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
9c50: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
9c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9c70: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
9c80: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
9c90: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
9ca0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
9cb0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
9cc0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
9cd0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
9ce0: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
9cf0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
9d00: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
9d10: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
9d20: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
9d30: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
9d40: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
9d50: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
9d60: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
9d70: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
9d80: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
9d90: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
9da0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
9db0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
9dc0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
9dd0: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
9de0: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
9df0: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
9e00: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
9e10: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
9e20: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
9e30: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9e40: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
9e50: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
9e60: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
9e70: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
9e80: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
9e90: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
9ea0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
9eb0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
9ec0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
9ed0: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
9ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
9ef0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
9f00: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
9f10: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
9f20: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
9f30: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
9f40: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
9f50: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
9f60: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
9f70: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
9f80: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
9f90: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
9fa0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
9fb0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
9fc0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
9fd0: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
9fe0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9ff0: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
a000: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
a010: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
a020: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
a030: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
a040: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
a050: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a060: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
a070: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
a080: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
a090: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
a0a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
a0b0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
a0c0: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
a0d0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
a0e0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
a0f0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
a100: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
a110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a120: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
a130: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a140: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
a150: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
a160: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a170: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
a180: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
a190: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
a1a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
a1b0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
a1c0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
a1d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
a1e0: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
a1f0: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
a200: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
a210: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
a220: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
a230: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
a240: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
a250: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
a260: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
a270: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
a280: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
a290: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
a2a0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
a2b0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
a2c0: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
a2d0: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
a2e0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
a2f0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
a300: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
a310: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
a320: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
a330: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
a340: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
a350: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
a360: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
a370: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
a380: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
a390: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
a3a0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
a3b0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
a3c0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
a3d0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
a3e0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
a3f0: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
a400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
a410: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
a420: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
a430: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
a440: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
a450: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
a460: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
a470: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
a480: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
a490: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
a4a0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
a4b0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
a4c0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
a4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a4e0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
a4f0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
a500: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
a510: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
a520: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a530: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
a540: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a550: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
a560: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
a570: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
a580: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
a590: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
a5a0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
a5b0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
a5c0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
a5d0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
a5e0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
a5f0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
a600: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
a610: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
a620: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
a630: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
a640: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
a650: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
a660: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
a670: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
a680: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
a690: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
a6a0: 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78  STER .  ** mutex
a6b0: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
a6c0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
a6d0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
a6e0: 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a   notify.c. .  **
a6f0: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
a700: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
a710: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
a720: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
a730: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
a740: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
a750: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
a760: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
a770: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
a780: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
a790: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
a7a0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
a7b0: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
a7c0: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
a7d0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
a7e0: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
a7f0: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
a800: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
a810: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
a820: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
a830: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
a840: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
a850: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
a860: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
a870: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
a880: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
a890: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
a8a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
a8b0: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a8d0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
a8e0: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
a8f0: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
a900: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
a910: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
a920: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
a930: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
a940: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
a950: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
a960: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
a970: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
a980: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
a990: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
a9a0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
a9b0: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
a9c0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
a9d0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
a9e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
a9f0: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
aa00: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
aa10: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
aa20: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
aa30: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
aa40: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
aa50: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
aa60: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
aa70: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
aa80: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
aa90: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
aaa0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
aab0: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
aac0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
aad0: 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  e      0x0000000
aae0: 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  1  /* True to tr
aaf0: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
ab00: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
ab10: 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
ab20: 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20 20  es  0x00000002  
ab30: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
ab40: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
ab50: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ab60: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
ab70: 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f     0x00000004  /
ab80: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
ab90: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
aba0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
abb0: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
abc0: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
abd0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
abe0: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
abf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ac00: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30  CacheSpill     0
ac10: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b  x00000010  /* OK
ac20: 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20   to spill pager 
ac30: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
ac40: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
ac50: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 32  ames   0x0000002
ac60: 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  0  /* Show full 
ac70: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
ac80: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
ac90: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
aca0: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
acb0: 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  40  /* Show shor
acc0: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
acd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ace0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
acf0: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
ad00: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
ad10: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
ad20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
ad50: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
ad60: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
ada0: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
adb0: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
adc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
add0: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
ade0: 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b  000100  /* Invok
adf0: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
ae00: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae30: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
ae40: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
ae50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae60: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
ae70: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a    0x00000200  /*
ae80: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
ae90: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
aea0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
aeb0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
aec0: 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20   0x00000400  /* 
aed0: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
aee0: 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20  f VDBE programs 
aef0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
af00: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
af10: 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20   0x00000800  /* 
af20: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
af30: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
af40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
af50: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30  eAddopTrace 0x00
af60: 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65  001000  /* Trace
af70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
af80: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
af90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
afa0: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
afb0: 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  02000  /* Do not
afc0: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
afd0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
afe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
aff0: 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30  dUncommitted 0x0
b000: 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73  004000  /* For s
b010: 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
b020: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b030: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
b040: 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a    0x00008000  /*
b050: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
b060: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
b070: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
b080: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
b090: 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f     0x00010000  /
b0a0: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
b0b0: 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
b0c0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
b0d0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30 30  Order   0x000200
b0e0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
b0f0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
b100: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b110: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
b120: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
b130: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
b140: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
b150: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
b160: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
b170: 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  080000  /* Enfor
b180: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
b190: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
b1a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
b1b0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
b1c0: 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0100000  /* Enab
b1d0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
b1e0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
b1f0: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
b200: 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30 30  ltin  0x00200000
b210: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
b220: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
b230: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b240: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
b250: 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f  n  0x00400000  /
b260: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
b270: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
b280: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
b290: 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30 30  Trigger  0x00800
b2a0: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
b2b0: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
b2c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b2d0: 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20  E_DeferFKs      
b2e0: 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20   0x01000000  /* 
b2f0: 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e  Defer all FK con
b300: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
b310: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
b320: 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30 30  Only      0x0200
b330: 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65  0000  /* Disable
b340: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
b350: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b360: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
b370: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
b380: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
b390: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a  QUERY PLAN */...
b3a0: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
b3b0: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
b3c0: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
b3d0: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
b3e0: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
b3f0: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
b400: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
b410: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
b420: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
b430: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
b440: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
b450: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
b460: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
b470: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
b480: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
b490: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
b4a0: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
b4b0: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
b4c0: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
b4d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b4e0: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
b4f0: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
b500: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
b510: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
b520: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
b530: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
b540: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
b550: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
b560: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
b570: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
b580: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
b590: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
b5a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
b5b0: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
b5c0: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
b5d0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
b5e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b5f0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
b600: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
b610: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
b620: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b630: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
b640: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
b650: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
b660: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
b670: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
b680: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
b690: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
b6a0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
b6b0: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
b6c0: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
b6d0: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
b6e0: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
b6f0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
b700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
b710: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
b720: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
b730: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
b740: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
b750: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
b760: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
b770: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
b780: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
b790: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
b7a0: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
b7b0: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
b7c0: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
b7d0: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
b7e0: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
b7f0: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
b800: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
b810: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
b820: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b830: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
b840: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
b850: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
b860: 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e   mask)  (((db)->
b870: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
b880: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f  ))!=0).#define O
b890: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
b8a0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28  ed(db, mask)   (
b8b0: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
b8c0: 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65  s&(mask))==0).#e
b8d0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  lse.#define Opti
b8e0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
b8f0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64  (db, mask)  0.#d
b900: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
b910: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
b920: 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a  sk)   1.#endif..
b930: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
b940: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
b950: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
b960: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
b970: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
b980: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
b990: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
b9a0: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
b9b0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
b9c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
b9d0: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
b9e0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
b9f0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ba00: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ba10: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ba20: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
ba30: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ba40: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ba50: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ba60: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ba70: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ba80: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ba90: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
baa0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
bab0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
bac0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
bad0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
bae0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
baf0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
bb00: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
bb10: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
bb20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
bb30: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
bb40: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
bb50: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
bb60: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
bb70: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
bb80: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
bb90: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
bba0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
bbb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bbc0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
bbd0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
bbe0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
bbf0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
bc00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bc10: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
bc20: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
bc30: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
bc40: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
bc50: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
bc60: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
bc70: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
bc80: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
bc90: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
bca0: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
bcb0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
bcc0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
bcd0: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
bce0: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
bcf0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
bd00: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
bd10: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
bd20: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
bd30: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
bd40: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
bd50: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
bd60: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
bd70: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
bd80: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bd90: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
bda0: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
bdb0: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
bdc0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
bdd0: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
bde0: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
bdf0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
be00: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
be10: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
be20: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
be30: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
be40: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
be50: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
be60: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
be70: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
be80: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
be90: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
bea0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
beb0: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
bec0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
bed0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
bee0: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
bef0: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
bf00: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
bf10: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf30: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
bf40: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
bf50: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
bf60: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
bf70: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
bf80: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
bf90: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
bfa0: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
bfb0: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
bfc0: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
bfd0: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
bfe0: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
bff0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
c000: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
c010: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
c020: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
c030: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
c040: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
c050: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
c060: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
c070: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
c080: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
c090: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
c0a0: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
c0b0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
c0c0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
c0d0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
c0e0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
c0f0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
c100: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
c110: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
c120: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
c130: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
c140: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
c150: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
c160: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
c170: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
c180: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
c190: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
c1a0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
c1b0: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
c1c0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
c1d0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
c1e0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
c1f0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
c200: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
c210: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
c220: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
c230: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
c240: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
c250: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
c260: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
c270: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
c280: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
c290: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
c2a0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
c2b0: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
c2c0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
c2d0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
c2e0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
c2f0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
c300: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
c310: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
c320: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
c330: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
c340: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
c350: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
c360: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
c370: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
c380: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
c390: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
c3a0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
c3b0: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
c3c0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
c3d0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
c3e0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
c3f0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
c400: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
c410: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
c420: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
c430: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c440: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
c450: 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  x003 /* SQLITE_U
c460: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
c470: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
c480: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c490: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
c4a0: 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  x004 /* Candidat
c4b0: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
c4c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
c4d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c4e0: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
c4f0: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
c500: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
c510: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
c520: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
c530: 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20  HEM    0x010 /* 
c540: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
c550: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
c560: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c570: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
c580: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
c590: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
c5a0: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f  ght be called */
c5b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c5c0: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
c5d0: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
c5e0: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
c5f0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c600: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
c610: 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74    0x080 /* Built
c620: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
c630: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c640: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
c650: 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42  NT    0x100 /* B
c660: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
c670: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
c680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c690: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30  C_COALESCE 0x200
c6a0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
c6b0: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
c6c0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
c6d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
c6e0: 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69  ELY 0x400 /* Bui
c6f0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
c700: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
c710: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c720: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20  _CONSTANT 0x800 
c730: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
c740: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
c750: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
c760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c770: 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20  _MINMAX  0x1000 
c780: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
c790: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
c7a0: 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  egates */../*.**
c7b0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
c7c0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
c7d0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
c7e0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
c7f0: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
c800: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
c810: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
c820: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
c830: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
c840: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c850: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c860: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
c870: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
c880: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
c890: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
c8a0: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
c8b0: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
c8c0: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
c8d0: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
c8e0: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
c8f0: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
c900: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
c910: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
c920: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
c930: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
c940: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
c950: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
c960: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
c970: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
c980: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
c990: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
c9a0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
c9b0: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
c9c0: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
c9d0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
c9e0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
c9f0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
ca00: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
ca10: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
ca20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
ca30: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
ca40: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
ca50: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
ca60: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
ca70: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
ca80: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
ca90: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
caa0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
cab0: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
cac0: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
cad0: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
cae0: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
caf0: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
cb00: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
cb10: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
cb20: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
cb30: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
cb40: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
cb50: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
cb60: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
cb70: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
cb80: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
cb90: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
cba0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
cbb0: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
cbc0: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
cbd0: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
cbe0: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
cbf0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
cc00: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
cc10: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
cc20: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
cc30: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
cc40: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
cc50: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
cc60: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
cc70: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
cc80: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
cc90: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
cca0: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
ccb0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
ccc0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
ccd0: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
cce0: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
ccf0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
cd00: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
cd10: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
cd20: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
cd30: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
cd40: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
cd50: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
cd60: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
cd70: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
cd80: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
cd90: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
cda0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
cdb0: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
cdc0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
cdd0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
cde0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
cdf0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
ce00: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
ce10: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
ce20: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
ce30: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
ce40: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
ce50: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
ce60: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ce70: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
ce80: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
ce90: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
cea0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
ceb0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
cec0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
ced0: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
cee0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
cef0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
cf00: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
cf10: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
cf20: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
cf30: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
cf40: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
cf50: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
cf60: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
cf70: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
cf80: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
cf90: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
cfa0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cfb0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cfc0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
cfd0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
cfe0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
cff0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
d000: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
d010: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
d020: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
d030: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
d040: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
d050: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
d060: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
d070: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
d080: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d090: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
d0a0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d0b0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
d0c0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
d0d0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
d0e0: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64  l,#zName,0,0}.#d
d0f0: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32  efine AGGREGATE2
d100: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
d110: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
d120: 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73  inal, extraFlags
d130: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
d140: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
d150: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d160: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c  L)|extraFlags, \
d170: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
d180: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
d190: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
d1a0: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
d1b0: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
d1c0: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
d1d0: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
d1e0: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
d1f0: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
d200: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
d210: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
d220: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
d230: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
d240: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
d250: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
d260: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
d270: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
d280: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
d290: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
d2a0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
d2b0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2d0: 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
d2e0: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
d2f0: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
d300: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d320: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
d330: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
d340: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
d350: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d370: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
d380: 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
d390: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
d3a0: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
d3b0: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
d3c0: 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
d3d0: 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
d3e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
d3f0: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
d400: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
d410: 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
d420: 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
d430: 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
d440: 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
d450: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
d460: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
d470: 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
d480: 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
d490: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
d4a0: 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
d4b0: 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
d4c0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
d4d0: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
d4e0: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
d4f0: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
d500: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
d510: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
d520: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
d530: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
d540: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
d550: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
d560: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
d570: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
d580: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
d590: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
d5a0: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
d5b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
d5c0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
d5d0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
d5e0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
d5f0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
d600: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
d630: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
d640: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
d650: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
d660: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
d670: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
d680: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
d690: 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
d6a0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
d6b0: 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
d6c0: 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
d6d0: 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
d6e0: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
d6f0: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
d700: 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
d710: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
d720: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
d730: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
d740: 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
d750: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
d760: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
d770: 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *zDflt;     /* 
d780: 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
d790: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
d7a0: 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  ue */.  char *zT
d7b0: 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61  ype;     /* Data
d7c0: 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63   type for this c
d7d0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
d7e0: 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
d7f0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d800: 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
d810: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
d820: 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
d830: 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
d840: 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
d850: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
d860: 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
d870: 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
d880: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
d890: 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
d8a0: 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
d8b0: 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
d8c0: 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63  d size of this c
d8d0: 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a  olumn.  INT==1 *
d8e0: 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
d8f0: 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
d900: 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
d910: 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
d920: 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
d930: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
d940: 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
d950: 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
d960: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
d970: 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
d980: 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
d990: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
d9a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
d9b0: 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
d9c0: 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
d9d0: 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
d9e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
d9f0: 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74  ./*.** A "Collat
da00: 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73  ing Sequence" is
da10: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
da20: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
da30: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
da40: 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61  cture. Conceptua
da50: 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67  lly, a collating
da60: 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73   sequence consis
da70: 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64  ts of a name and
da80: 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  .** a comparison
da90: 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65   routine that de
daa0: 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  fines the order 
dab0: 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65  of that sequence
dac0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53  ..**.** If CollS
dad0: 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c  eq.xCmp is NULL,
dae0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
daf0: 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  he.** collating 
db00: 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65  sequence is unde
db10: 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20  fined.  Indices 
db20: 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65  built on an unde
db30: 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69  fined.** collati
db40: 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20  ng sequence may 
db50: 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77  not be read or w
db60: 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ritten..*/.struc
db70: 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68  t CollSeq {.  ch
db80: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
db90: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
dba0: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
dbb0: 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63  uence, UTF-8 enc
dbc0: 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63  oded */.  u8 enc
dbd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
dbe0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
dbf0: 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70   handled by xCmp
dc00: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  () */.  void *pU
dc10: 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ser;          /*
dc20: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
dc30: 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69  to xCmp() */.  i
dc40: 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a  nt (*xCmp)(void*
dc50: 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64  ,int, const void
dc60: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
dc70: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78  id*);.  void (*x
dc80: 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a  Del)(void*);  /*
dc90: 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   Destructor for 
dca0: 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  pUser */.};../*.
dcb0: 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20  ** A sort order 
dcc0: 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53  can be either AS
dcd0: 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64  C or DESC..*/.#d
dce0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
dcf0: 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20  ASC       0  /* 
dd00: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
dd10: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
dd20: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53  ne SQLITE_SO_DES
dd30: 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72  C      1  /* Sor
dd40: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
dd50: 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  rder */../*.** C
dd60: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
dd70: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
dd80: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
dd90: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
dda0: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
ddb0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
ddc0: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
ddd0: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
dde0: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
ddf0: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
de00: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
de10: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
de20: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
de30: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
de40: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
de50: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
de60: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
de70: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
de80: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
de90: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
dea0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
deb0: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
dec0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
ded0: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
dee0: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
def0: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
df00: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
df10: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
df20: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
df30: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
df40: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
df50: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
df60: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
df70: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
df80: 6e 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45  n.  And the NONE
df90: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
dfa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dfb0: 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27  E_AFF_NONE     '
dfc0: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
dfd0: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
dfe0: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
dff0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
e000: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
e010: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
e020: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
e030: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
e040: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
e050: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
e060: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
e070: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e080: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
e090: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
e0a0: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
e0b0: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
e0c0: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
e0d0: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
e0e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e0f0: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
e100: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
e110: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
e120: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
e130: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
e140: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
e150: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
e160: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
e170: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
e180: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
e190: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
e1a0: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
e1b0: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
e1c0: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
e1d0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
e1e0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
e1f0: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
e200: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
e210: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
e220: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
e230: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
e240: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
e250: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
e260: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
e270: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e280: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
e290: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
e2a0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
e2b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
e2c0: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
e2d0: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
e2e0: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
e2f0: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
e300: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e310: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
e320: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
e330: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e340: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
e350: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
e360: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
e370: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
e380: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
e390: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
e3a0: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
e3b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
e3c0: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
e3d0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
e3e0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
e3f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
e400: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
e410: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
e420: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
e430: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
e440: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
e450: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
e460: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
e470: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
e480: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
e490: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
e4a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
e4b0: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
e4c0: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
e4d0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
e4e0: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
e4f0: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
e500: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
e510: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
e520: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e530: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
e540: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
e550: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
e560: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
e570: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
e580: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
e590: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
e5a0: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
e5b0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
e5c0: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
e5d0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
e5e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
e5f0: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
e600: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
e610: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
e620: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
e630: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
e640: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
e650: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e660: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
e670: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
e680: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
e690: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
e6a0: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
e6b0: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
e6c0: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
e6d0: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
e6e0: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
e6f0: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
e700: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
e710: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
e720: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
e730: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
e740: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
e750: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
e760: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
e770: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
e780: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
e790: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
e7a0: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
e7b0: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
e7c0: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
e7d0: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
e7e0: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
e7f0: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
e800: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
e810: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
e820: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
e830: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
e840: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
e850: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
e860: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
e870: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
e880: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
e890: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
e8a0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
e8b0: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
e8c0: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
e8d0: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
e8e0: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
e8f0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
e900: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
e910: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
e920: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
e930: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
e940: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
e950: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
e960: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
e970: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
e980: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
e990: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
e9a0: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
e9b0: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
e9c0: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
e9d0: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
e9e0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
e9f0: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
ea00: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
ea10: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
ea20: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
ea30: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
ea40: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
ea50: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
ea60: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
ea70: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
ea80: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
ea90: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
eaa0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
eab0: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
eac0: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
ead0: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
eae0: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
eaf0: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
eb00: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
eb10: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
eb20: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
eb30: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
eb40: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
eb50: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
eb60: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
eb70: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
eb80: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
eb90: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
eba0: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
ebb0: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
ebc0: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
ebd0: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
ebe0: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
ebf0: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
ec00: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
ec10: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
ec20: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
ec30: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
ec40: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
ec50: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
ec60: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
ec70: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
ec80: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
ec90: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
eca0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
ecb0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
ecc0: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
ecd0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
ece0: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
ecf0: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
ed00: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
ed10: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
ed20: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
ed30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ed40: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
ed50: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
ed60: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
ed70: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
ed80: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
ed90: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
eda0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
edb0: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
edc0: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
edd0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
ede0: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
edf0: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ee10: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
ee20: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
ee30: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
ee40: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
ee50: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
ee60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
ee70: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
ee80: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
ee90: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
eea0: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
eeb0: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
eec0: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
eed0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
eee0: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
eef0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
ef00: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
ef10: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
ef20: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
ef30: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
ef40: 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  f the.** followi
ef50: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
ef60: 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20  .** Table.zName 
ef70: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
ef80: 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63  he table.  The c
ef90: 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ase of the origi
efa0: 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41  nal.** CREATE TA
efb0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
efc0: 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73   stored, but cas
efd0: 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69  e is not signifi
efe0: 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  cant for.** comp
eff0: 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  arisons..**.** T
f000: 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65  able.nCol is the
f010: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
f020: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
f030: 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73  .  Table.aCol is
f040: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
f050: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c   an array of Col
f060: 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20  umn structures, 
f070: 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  one for each col
f080: 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  umn..**.** If th
f090: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49  e table has an I
f0a0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
f0b0: 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69  EY, then Table.i
f0c0: 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65  PKey is the inde
f0d0: 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75  x of.** the colu
f0e0: 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20  mn that is that 
f0f0: 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65  key.   Otherwise
f100: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
f110: 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a  negative.  Note.
f120: 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
f130: 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d  type of the PRIM
f140: 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20  ARY KEY must be 
f150: 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73  INTEGER for this
f160: 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20   field to.** be 
f170: 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52  set.  An INTEGER
f180: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
f190: 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69  used as the rowi
f1a0: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
f1b0: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20  f.** the table. 
f1c0: 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20   If a table has 
f1d0: 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  no INTEGER PRIMA
f1e0: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72  RY KEY, then a r
f1f0: 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69  andom rowid.** i
f200: 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20  s generated for 
f210: 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
f220: 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72  table.  TF_HasPr
f230: 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20  imaryKey is set 
f240: 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  if.** the table 
f250: 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20  has any PRIMARY 
f260: 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20  KEY, INTEGER or 
f270: 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a  otherwise..**.**
f280: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74   Table.tnum is t
f290: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  he page number f
f2a0: 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65  or the root BTre
f2b0: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  e page of the ta
f2c0: 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61  ble in the.** da
f2d0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66  tabase file.  If
f2e0: 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68   Table.iDb is th
f2f0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
f300: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
f310: 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69  ckend.** in sqli
f320: 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20  te.aDb[].  0 is 
f330: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
f340: 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66  abase and 1 is f
f350: 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74  or the file that
f360: 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72  .** holds tempor
f370: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ary tables and i
f380: 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45  ndices.  If TF_E
f390: 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a  phemeral is set.
f3a0: 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  ** then the tabl
f3b0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
f3c0: 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75   file that is au
f3d0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
f3e0: 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20  ted.** when the 
f3f0: 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74  VDBE cursor to t
f400: 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  he table is clos
f410: 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
f420: 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a  e Table.tnum .**
f430: 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72   refers VDBE cur
f440: 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20  sor number that 
f450: 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20  holds the table 
f460: 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65  open, not to the
f470: 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75   root.** page nu
f480: 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74  mber.  Transient
f490: 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64   tables are used
f4a0: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73   to hold the res
f4b0: 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62  ults of a.** sub
f4c0: 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65  -query that appe
f4d0: 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ars instead of a
f4e0: 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65   real table name
f4f0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
f500: 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c  use .** of a SEL
f510: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
f520: 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
f530: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
f540: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
f550: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
f560: 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
f570: 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
f580: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
f590: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
f5a0: 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
f5b0: 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
f5c0: 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
f5d0: 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
f5e0: 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
f5f0: 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
f600: 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
f610: 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
f620: 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
f630: 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
f640: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
f650: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
f660: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
f670: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
f680: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
f690: 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
f6a0: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
f6b0: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
f6c0: 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  mn */.#ifndef SQ
f6d0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a  LITE_OMIT_CHECK.
f6e0: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
f6f0: 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
f700: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
f710: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45  */.#endif.  LogE
f720: 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
f730: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
f740: 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
f750: 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
f760: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74  table */.  int t
f770: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
f780: 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f  /* Root BTree no
f790: 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  de for this tabl
f7a0: 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76  e (see note abov
f7b0: 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  e) */.  i16 iPKe
f7c0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
f7d0: 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
f7e0: 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
f7f0: 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20   as the primary 
f800: 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f  key */.  i16 nCo
f810: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
f820: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
f830: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
f840: 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20   */.  u16 nRef; 
f850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f860: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
f870: 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
f880: 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
f890: 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
f8a0: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
f8b0: 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
f8c0: 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
f8d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
f8e0: 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
f8f0: 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
f900: 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
f910: 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
f920: 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
f930: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
f940: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
f950: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
f960: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
f970: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
f980: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
f990: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
f9a0: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
f9b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f9c0: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
f9d0: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
f9e0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
f9f0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
fa00: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
fa10: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
fa20: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
fa30: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
fa40: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
fa50: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
fa60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
fa70: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
fa80: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
fa90: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
faa0: 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
fab0: 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
fac0: 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56  dule name */.  V
fad0: 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
fae0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
faf0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
fb00: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
fb10: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
fb20: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
fb30: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
fb40: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
fb50: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
fb60: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
fb70: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
fb80: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
fb90: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
fba0: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
fbb0: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
fbc0: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
fbd0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
fbe0: 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
fbf0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
fc00: 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
fc10: 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
fc20: 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
fc30: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
fc40: 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
fc50: 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
fc60: 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
fc70: 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
fc80: 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
fc90: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
fca0: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
fcb0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
fcc0: 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
fcd0: 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
fce0: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
fcf0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
fd00: 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
fd10: 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
fd20: 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
fd30: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
fd40: 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
fd50: 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f  wid    0x20    /
fd60: 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e  * No rowid used.
fd70: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
fd80: 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a  the key */.../*.
fd90: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
fda0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
fdb0: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
fdc0: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
fdd0: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
fde0: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
fdf0: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
fe00: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
fe10: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
fe20: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
fe30: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
fe40: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
fe50: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
fe60: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
fe70: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
fe80: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
fe90: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
fea0: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
feb0: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
fec0: 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
fed0: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
fee0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
fef0: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
ff00: 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
ff10: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
ff20: 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
ff30: 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20   Does the table 
ff40: 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a  have a rowid */.
ff50: 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64  #define HasRowid
ff60: 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74  (X)     (((X)->t
ff70: 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74  abFlags & TF_Wit
ff80: 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a  houtRowid)==0)..
ff90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
ffa0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
ffb0: 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
ffc0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
ffd0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
ffe0: 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
fff0: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
10000 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
10010 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
10020 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
10030 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
10040 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10050 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
10060 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
10070 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
10080 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
10090 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
100a0 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
100b0 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
100c0 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
100d0 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
100e0 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
100f0 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
10100 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
10110 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
10120 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
10130 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
10140 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
10150 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
10160 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
10170 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
10180 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
10190 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
101a0 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61  ** Equivalent na
101b0 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66  mes:.**.**     f
101c0 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69  rom-table == chi
101d0 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  ld-table.**     
101e0 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61    to-table == pa
101f0 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a  rent-table.**.**
10200 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
10210 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
10220 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
10230 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10240 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
10250 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
10260 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
10270 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
10280 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
10290 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
102a0 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
102b0 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
102c0 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
102d0 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
102e0 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f  **.** The list o
102f0 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f  f all parents fo
10300 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20  r child Table X 
10310 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b  is held at X.pFK
10320 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74  ey..**.** A list
10330 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e   of all children
10340 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d   for a table nam
10350 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68  ed Z (which migh
10360 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74  t not even exist
10370 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20  ).** is held in 
10380 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20  Schema.fkeyHash 
10390 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20  with a hash key 
103a0 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  of Z..*/.struct 
103b0 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
103c0 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
103d0 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
103e0 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
103f0 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
10400 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
10410 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
10420 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73   FKey with the s
10430 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65  ame in pFrom. Ne
10440 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72  xt parent of pFr
10450 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
10460 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
10470 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
10480 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
10490 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
104a0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
104b0 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  To;    /* Next w
104c0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
104d0 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20  . Next child of 
104e0 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  zTo. */.  FKey *
104f0 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50  pPrevTo;    /* P
10500 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65  revious with the
10510 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69   same zTo */.  i
10520 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
10530 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
10540 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
10550 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
10560 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
10570 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
10580 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
10590 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
105a0 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
105b0 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
105c0 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
105d0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45          /* ON DE
105e0 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41  LETE and ON UPDA
105f0 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70  TE actions, resp
10600 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72  ectively */.  Tr
10610 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72  igger *apTrigger
10620 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20  [2];/* Triggers 
10630 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63  for aAction[] ac
10640 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
10650 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20  t sColMap {     
10660 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
10670 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
10680 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
10690 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
106a0 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  om;            /
106b0 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
106c0 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
106d0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
106e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
106f0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
10700 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50  .  If NULL use P
10710 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
10720 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20  } aCol[1];      
10730 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
10740 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
10750 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d  Col columns */.}
10760 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20  ;../*.** SQLite 
10770 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69  supports many di
10780 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20  fferent ways to 
10790 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72  resolve a constr
107a0 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20  aint.** error.  
107b0 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
107c0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ing means that a
107d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
107e0 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20  ation.** causes 
107f0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
10800 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c   process to fail
10810 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72   and for the cur
10820 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
10830 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  .** to be rolled
10840 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72   back.  ABORT pr
10850 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
10860 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
10870 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73  process.** fails
10880 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63   and any prior c
10890 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74  hanges from that
108a0 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   one operation a
108b0 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a  re backed out,.*
108c0 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61  * but the transa
108d0 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c  ction is not rol
108e0 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20  led back.  FAIL 
108f0 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
10900 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65   that.** the ope
10910 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  ration in progre
10920 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74  ss stops and ret
10930 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f  urns an error co
10940 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a  de.  But prior.*
10950 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f  * changes due to
10960 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
10970 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  ion are not back
10980 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f  ed out and no ro
10990 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73  llback.** occurs
109a0 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20  .  IGNORE means 
109b0 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75  that the particu
109c0 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75  lar row that cau
109d0 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  sed the constrai
109e0 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e  nt.** error is n
109f0 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75  ot inserted or u
10a00 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73  pdated.  Process
10a10 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
10a20 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73  d no error.** is
10a30 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c   returned.  REPL
10a40 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70  ACE means that p
10a50 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
10a60 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61  ase rows that ca
10a70 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45  used.** a UNIQUE
10a80 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
10a90 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65  ation are remove
10aa0 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65  d so that the ne
10ab0 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75  w insert or.** u
10ac0 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65  pdate can procee
10ad0 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
10ae0 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
10af0 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65  error is reporte
10b00 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43  d..**.** RESTRIC
10b10 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20  T, SETNULL, and 
10b20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20  CASCADE actions 
10b30 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f  apply only to fo
10b40 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52  reign keys..** R
10b50 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73  ESTRICT is the s
10b60 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72  ame as ABORT for
10b70 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69   IMMEDIATE forei
10b80 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a  gn keys and the.
10b90 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42  ** same as ROLLB
10ba0 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ACK for DEFERRED
10bb0 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20   keys.  SETNULL 
10bc0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66  means that the f
10bd0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73  oreign.** key is
10be0 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43   set to NULL.  C
10bf0 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61  ASCADE means tha
10c00 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50  t a DELETE or UP
10c10 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72  DATE of the.** r
10c20 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
10c30 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65  row is propagate
10c40 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74  d into the row t
10c50 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a  hat holds the.**
10c60 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a   foreign key..**
10c70 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69   .** The followi
10c80 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75  ng symbolic valu
10c90 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72  es are used to r
10ca0 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65  ecord which type
10cb0 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f  .** of action to
10cc0 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   take..*/.#defin
10cd0 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20  e OE_None     0 
10ce0 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f    /* There is no
10cf0 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63   constraint to c
10d00 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  heck */.#define 
10d10 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20  OE_Rollback 1   
10d20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72  /* Fail the oper
10d30 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61  ation and rollba
10d40 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
10d50 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
10d60 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a  _Abort    2   /*
10d70 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65   Back out change
10d80 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c  s but do no roll
10d90 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
10da0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46   */.#define OE_F
10db0 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53  ail     3   /* S
10dc0 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f  top the operatio
10dd0 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20  n but leave all 
10de0 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f  prior changes */
10df0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f  .#define OE_Igno
10e00 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f  re   4   /* Igno
10e10 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f  re the error. Do
10e20 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45   not do the INSE
10e30 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
10e40 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61  #define OE_Repla
10e50 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74  ce  5   /* Delet
10e60 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72  e existing recor
10e70 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52  d, then do INSER
10e80 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a  T or UPDATE */..
10e90 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72  #define OE_Restr
10ea0 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62  ict 6   /* OE_Ab
10eb0 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ort for IMMEDIAT
10ec0 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66  E, OE_Rollback f
10ed0 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23  or DEFERRED */.#
10ee0 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c  define OE_SetNul
10ef0 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68  l  7   /* Set th
10f00 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61  e foreign key va
10f10 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23  lue to NULL */.#
10f20 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c  define OE_SetDfl
10f30 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68  t  8   /* Set th
10f40 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61  e foreign key va
10f50 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75  lue to its defau
10f60 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  lt */.#define OE
10f70 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a  _Cascade  9   /*
10f80 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61   Cascade the cha
10f90 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  nges */..#define
10fa0 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20   OE_Default  10 
10fb0 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20   /* Do whatever 
10fc0 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
10fd0 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  on is */.../*.**
10fe0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
10ff0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11000 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
11010 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  d as the first.*
11020 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  * argument to sq
11030 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70  lite3VdbeKeyComp
11040 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20  are and is used 
11050 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a  to control the .
11060 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
11070 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
11080 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
11090 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
110a0 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
110b0 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
110c0 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
110d0 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
110e0 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
110f0 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
11100 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
11110 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
11120 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
11130 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
11140 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
11150 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11160 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
11170 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
11180 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
111a0 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
111b0 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
111c0 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
111d0 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
111e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
111f0 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
11200 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
11210 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20    u16 nXField;  
11220 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11230 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e  of columns beyon
11240 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e  d the key column
11250 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
11260 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
11270 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
11280 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
11290 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
112a0 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
112b0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
112c0 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
112d0 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
112e0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
112f0 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
11300 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
11310 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
11320 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11330 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
11340 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11350 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e  t a.** single in
11360 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20  dex record that 
11370 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
11380 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
11390 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76   individual.** v
113a0 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  alues..**.** A r
113b0 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
113c0 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
113d0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
113e0 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
113f0 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
11400 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
11410 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
11420 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
11430 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
11440 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
11450 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
11460 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
11470 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
11480 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
11490 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
114a0 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
114b0 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
114c0 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
114d0 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
114e0 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  e holds a record
114f0 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
11500 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62  y been disassemb
11510 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20  led.** into its 
11520 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c  constituent fiel
11530 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ds..**.** The r1
11540 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76   and r2 member v
11550 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
11560 79 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70  y used by the op
11570 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73  timized comparis
11580 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  on.** functions 
11590 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72  vdbeRecordCompar
115a0 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52  eInt() and vdbeR
115b0 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69  ecordCompareStri
115c0 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ng()..*/.struct 
115d0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
115e0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
115f0 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
11600 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
11610 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
11620 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
11630 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11640 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
11650 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
11660 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
11670 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
11680 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
11690 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
116a0 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
116b0 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
116c0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
116d0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
116e0 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d   NOMEM) */.  Mem
116f0 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
11700 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
11710 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20  int r1;         
11720 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
11730 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
11740 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72   rhs) */.  int r
11750 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  2;             /
11760 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
11770 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29  n if (rhs < lhs)
11780 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45   */.};.../*.** E
11790 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
117a0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
117b0 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
117c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
117d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
117e0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
117f0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
11800 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
11810 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
11820 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
11830 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
11840 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
11850 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
11860 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
11870 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
11880 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
11890 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
118a0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
118b0 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
118c0 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
118d0 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
118e0 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
118f0 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
11900 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
11910 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
11920 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
11930 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
11940 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
11950 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
11960 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
11970 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
11980 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
11990 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
119a0 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
119b0 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
119c0 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
119d0 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
119e0 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
119f0 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20  because the .** 
11a00 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
11a10 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
11a20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
11a30 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
11a40 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
11a50 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
11a60 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
11a70 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
11a80 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
11a90 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
11aa0 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
11ab0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
11ac0 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
11ad0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
11ae0 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
11af0 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
11b00 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
11b10 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
11b20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
11b30 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
11b40 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
11b50 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
11b60 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
11b70 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
11b80 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
11b90 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
11ba0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
11bb0 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
11bc0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
11bd0 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  on .** algorithm
11be0 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
11bf0 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
11c00 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
11c10 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
11c20 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72   element..*/.str
11c30 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
11c40 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
11c50 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
11c60 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
11c70 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
11c80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
11c90 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
11ca0 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
11cb0 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
11cc0 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
11cd0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
11ce0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
11cf0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
11d00 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
11d10 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
11d20 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
11d30 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
11d40 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
11d50 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
11d60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
11d70 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
11d80 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
11d90 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
11da0 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
11db0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
11dc0 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
11dd0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
11de0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
11df0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
11e00 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
11e10 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
11e20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
11e30 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
11e40 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
11e50 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
11e60 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
11e70 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
11e80 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
11e90 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
11ea0 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
11eb0 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
11ec0 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
11ed0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
11ee0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
11ef0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
11f00 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
11f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
11f20 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
11f30 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
11f40 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
11f50 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
11f60 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11f70 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
11f80 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
11f90 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
11fa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11fb0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
11fc0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
11fd0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
11fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11ff0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12000 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
12010 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
12020 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
12030 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
12040 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
12050 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
12060 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
12070 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
12080 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
12090 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
120a0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
120b0 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
120c0 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
120d0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
120e0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
120f0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
12100 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
12110 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
12120 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
12130 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
12140 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
12150 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
12160 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
12170 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
12180 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
12190 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
121a0 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
121b0 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
121c0 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
121d0 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
121e0 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
121f0 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
12200 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
12210 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65  if true */.#ifde
12220 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
12230 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
12240 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
12250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12260 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
12270 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
12280 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
12290 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
122a0 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
122b0 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
122c0 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
122d0 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
122e0 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
122f0 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
12300 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
12310 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
12320 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
12330 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
12340 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
12350 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
12360 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
12370 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
12380 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
12390 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
123a0 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
123b0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
123c0 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
123d0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
123e0 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ndex */.#endif.}
123f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
12400 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65   values for Inde
12410 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65  x.idxType.*/.#de
12420 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
12430 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20  YPE_APPDEF      
12440 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75  0   /* Created u
12450 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45  sing CREATE INDE
12460 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  X */.#define SQL
12470 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51  ITE_IDXTYPE_UNIQ
12480 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49  UE      1   /* I
12490 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51  mplements a UNIQ
124a0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  UE constraint */
124b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
124c0 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
124d0 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68  EY  2   /* Is th
124e0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
124f0 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a  r the table */..
12500 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
12510 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50  f index X is a P
12520 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78  RIMARY KEY index
12530 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72   */.#define IsPr
12540 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29  imaryKeyIndex(X)
12550 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d    ((X)->idxType=
12560 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f  =SQLITE_IDXTYPE_
12570 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20  PRIMARYKEY)../* 
12580 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
12590 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51  ndex X is a UNIQ
125a0 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  UE index */.#def
125b0 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65  ine IsUniqueInde
125c0 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  x(X)      ((X)->
125d0 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
125e0 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  )../*.** Each sa
125f0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
12600 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
12610 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
12620 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
12630 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
12640 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
12650 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
12660 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
12670 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
12680 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
12690 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
126a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
126b0 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
126c0 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
126d0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
126e0 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
126f0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
12700 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12710 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
12720 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
12730 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
12740 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
12750 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
12760 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
12770 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
12780 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
12790 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
127a0 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
127b0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
127c0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
127d0 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
127e0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
127f0 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
12800 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
12810 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
12820 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d  * Each token com
12830 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  ing out of the l
12840 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61  exer is an insta
12850 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
12860 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e  tructure.  Token
12870 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20  s are also used 
12880 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78  as part of an ex
12890 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  pression..**.** 
128a0 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d  Note if Token.z=
128b0 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79  =0 then Token.dy
128c0 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72  n and Token.n ar
128d0 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a  e undefined and.
128e0 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72  ** may contain r
128f0 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44  andom values.  D
12900 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61  o not make any a
12910 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74  ssumptions about
12920 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e   Token.dyn.** an
12930 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54  d Token.n when T
12940 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74  oken.z==0..*/.st
12950 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
12960 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
12970 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
12980 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
12990 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
129a0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
129b0 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
129c0 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
129d0 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
129e0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
129f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
12a00 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
12a10 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
12a20 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
12a30 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
12a40 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
12a50 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
12a60 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
12a70 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
12a80 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
12a90 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
12aa0 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
12ab0 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
12ac0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
12ad0 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
12ae0 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
12af0 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
12b00 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
12b10 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
12b20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
12b30 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
12b40 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
12b50 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
12b60 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
12b70 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
12b80 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
12b90 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
12ba0 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
12bb0 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
12bc0 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
12bd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
12be0 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
12bf0 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
12c00 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
12c10 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
12c20 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
12c30 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
12c40 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
12c50 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
12c60 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
12c70 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
12c80 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
12c90 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12cb0 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
12cc0 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
12cd0 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
12ce0 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
12cf0 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
12d00 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
12d10 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
12d20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
12d30 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12d50 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
12d60 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
12d70 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
12d80 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
12d90 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
12da0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
12db0 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
12dc0 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
12dd0 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
12de0 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
12df0 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
12e00 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
12e10 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
12e20 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
12e30 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
12e40 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
12e50 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
12e60 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
12e70 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
12e80 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
12e90 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
12ea0 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
12eb0 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
12ec0 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
12ed0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
12ee0 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
12ef0 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
12f00 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
12f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
12f20 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
12f30 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
12f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
12f50 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
12f60 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
12f70 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
12f80 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12f90 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
12fa0 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
12fb0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
12fc0 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
12fd0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
12fe0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
12ff0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
13000 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13020 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
13030 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
13040 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
13050 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
13060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13070 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
13080 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
13090 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
130a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
130b0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
130c0 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
130d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
130e0 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
130f0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
13100 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
13110 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
13120 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13140 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
13150 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
13160 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
13170 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13190 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
131a0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
131b0 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
131c0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
131d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
131e0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
131f0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
13200 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
13210 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
13220 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
13230 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
13240 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
13250 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
13260 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
13270 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13290 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
132a0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
132b0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
132c0 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
132d0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
132e0 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
132f0 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
13300 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
13310 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13330 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
13340 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
13350 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
13360 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
13370 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
13380 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
13390 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
133a0 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
133b0 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
133c0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
133d0 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
133e0 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
133f0 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
13400 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
13410 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
13420 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
13430 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
13440 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
13450 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
13460 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
13470 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
13480 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
13490 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
134a0 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
134b0 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
134c0 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
134d0 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
134e0 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
134f0 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
13500 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
13510 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
13520 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
13530 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
13540 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
13550 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
13560 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
13570 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
13580 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
13590 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
135a0 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
135b0 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
135c0 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
135d0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
135e0 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
135f0 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
13600 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
13610 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
13620 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
13630 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
13640 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
13650 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
13660 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
13670 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
13680 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
13690 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
136a0 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
136b0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
136c0 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
136d0 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
136e0 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
136f0 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
13700 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
13710 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
13720 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
13730 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
13740 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
13750 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
13760 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
13770 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
13780 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
13790 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a  LOAT, TK_BLOB, .
137a0 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
137b0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
137c0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
137d0 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
137e0 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
137f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
13800 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
13810 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
13820 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
13830 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61  ns the .** varia
13840 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
13850 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
13860 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
13870 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
13880 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
13890 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
138a0 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
138b0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
138c0 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
138d0 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
138e0 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
138f0 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
13900 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
13910 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
13920 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
13930 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
13940 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
13950 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
13960 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
13970 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
13980 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
13990 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
139a0 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
139b0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
139c0 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
139d0 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
139e0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
139f0 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
13a00 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
13a10 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
13a20 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
13a30 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
13a40 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
13a50 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
13a60 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
13a70 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
13a80 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
13a90 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
13aa0 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
13ab0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
13ac0 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
13ad0 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
13ae0 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
13af0 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
13b00 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
13b10 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
13b20 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
13b30 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
13b40 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
13b50 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
13b60 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
13b70 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
13b80 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
13b90 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
13ba0 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
13bb0 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
13bc0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
13bd0 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
13be0 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
13bf0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
13c00 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
13c10 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
13c20 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
13c30 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
13c40 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
13c50 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
13c60 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
13c70 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
13c80 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
13c90 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
13ca0 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
13cb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
13cc0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
13cd0 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
13ce0 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
13cf0 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61  ion mark .** cha
13d00 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
13d10 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
13d20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
13d30 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
13d40 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  ndex .** number 
13d50 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
13d60 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
13d70 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
13d80 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
13d90 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
13da0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
13db0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
13dc0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
13dd0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
13de0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
13df0 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
13e00 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
13e10 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
13e20 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
13e30 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
13e40 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
13e50 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
13e60 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
13e70 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
13e80 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
13e90 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
13ea0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
13eb0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
13ec0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
13ed0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
13ee0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
13ef0 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
13f00 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
13f10 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
13f20 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
13f30 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
13f40 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
13f50 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
13f60 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
13f70 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
13f80 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
13f90 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
13fa0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
13fb0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
13fc0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
13fd0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
13fe0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
13ff0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
14000 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
14010 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
14020 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
14030 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
14040 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
14050 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
14060 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
14070 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
14080 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
14090 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
140a0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
140b0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
140c0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
140d0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
140e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
140f0 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
14100 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
14110 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
14120 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
14130 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
14140 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
14150 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
14160 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
14170 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
14180 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
14190 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
141a0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
141b0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
141c0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
141d0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
141e0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
141f0 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
14200 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
14210 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
14220 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
14230 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
14240 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
14250 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
14260 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
14270 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
14280 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
142a0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
142b0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
142c0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
142d0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
142e0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
142f0 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
14300 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
14310 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
14320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
14330 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
14340 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
14350 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
14360 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
14370 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
14380 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
14390 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
143a0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
143b0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
143c0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
143d0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
143e0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
143f0 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
14400 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
14410 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
14420 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
14430 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
14440 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
14450 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
14460 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
14470 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
14480 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
14490 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
144a0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
144b0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20  or malfunction. 
144c0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
144d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14500 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
14510 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
14520 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
14530 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
14540 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
14550 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
14560 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
14570 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
14580 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
14590 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
145a0 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
145b0 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
145c0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
145d0 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
145e0 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
145f0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
14600 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
14610 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
14620 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
14630 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
14640 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
14650 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
14660 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
14670 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
14680 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
14690 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
146a0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
146b0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
146c0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
146d0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
146e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
146f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
14720 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
14730 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
14740 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
14750 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
14760 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
14770 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
14780 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
14790 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
147a0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
147b0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
147c0 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
147d0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
147e0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
147f0 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
14800 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
14830 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
14840 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
14870 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
14880 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20   likelihood */. 
14890 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
148a0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
148b0 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
148c0 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
148d0 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
148e0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
148f0 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
14900 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
14910 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
14920 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
14930 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
14940 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
14950 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
14960 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
14970 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
14980 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
14990 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
149a0 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
149b0 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  n */.  u8 op2;  
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
149d0 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72   TK_REGISTER: or
149e0 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20  iginal value of 
149f0 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20  Expr.op.        
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74   ** TK_COLUMN: t
14a20 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66  he value of p5 f
14a30 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20  or OP_Column.   
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f        ** TK_AGG_
14a60 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e  FUNCTION: nestin
14a70 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67  g depth */.  Agg
14a80 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
14a90 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54      /* Used by T
14aa0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64  K_AGG_COLUMN and
14ab0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
14ac0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
14ad0 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
14ae0 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c  Table for TK_COL
14af0 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  UMN expressions.
14b00 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14b10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14b20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
14b30 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
14b40 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
14b50 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
14b60 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
14b70 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
14b80 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
14b90 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
14ba0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
14bb0 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
14bc0 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
14bd0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
14be0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
14bf0 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
14c00 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49  d  0x000004 /* I
14c10 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
14c20 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
14c30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
14c40 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30  rror     0x00000
14c50 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20  8 /* Expression 
14c60 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
14c70 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
14c80 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
14c90 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20  ct  0x000010 /* 
14ca0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
14cb0 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
14cc0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
14cd0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
14ce0 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65   0x000020 /* pSe
14cf0 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
14d00 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
14d10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
14d20 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34  blQuoted 0x00004
14d30 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73  0 /* token.z was
14d40 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
14d50 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
14d60 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30  EP_InfixFunc 0x0
14d70 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
14d80 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
14d90 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
14da0 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
14db0 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30  EP_Collate   0x0
14dc0 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
14dd0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
14de0 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a  ATE operator */.
14df0 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72  #define EP_Gener
14e00 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a  ic   0x000200 /*
14e10 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20   Ignore COLLATE 
14e20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74  or affinity on t
14e30 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66  his tree */.#def
14e40 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
14e50 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74   0x000400 /* Int
14e60 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
14e70 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
14e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
14e90 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30  IsSelect 0x00080
14ea0 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69  0 /* x.pSelect i
14eb0 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
14ec0 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
14ed0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69  /.#define EP_Ski
14ee0 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20  p      0x001000 
14ef0 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20  /* COLLATE, AS, 
14f00 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23  or UNLIKELY */.#
14f10 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
14f20 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20  d   0x002000 /* 
14f30 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
14f40 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
14f50 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
14f60 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
14f70 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72  0x004000 /* Expr
14f80 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b   struct EXPR_TOK
14f90 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
14fa0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
14fb0 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78   EP_Static    0x
14fc0 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69  008000 /* Held i
14fd0 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
14fe0 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
14ff0 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  c() */.#define E
15000 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31  P_MemToken  0x01
15010 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20  0000 /* Need to 
15020 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
15030 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
15040 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75  define EP_NoRedu
15050 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20  ce  0x020000 /* 
15060 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
15070 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
15080 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e  */.#define EP_Un
15090 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30  likely  0x040000
150a0 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f   /* unlikely() o
150b0 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66  r likelihood() f
150c0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
150d0 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20  ne EP_Constant  
150e0 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65  0x080000 /* Node
150f0 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a   is a constant *
15100 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e  /.#define EP_Can
15110 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20  BeNull 0x100000 
15120 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64  /* Can be null d
15130 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20  espite NOT NULL 
15140 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 0a 2f  constraint */../
15150 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
15160 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
15170 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
15180 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
15190 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
151a0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
151b0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
151c0 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
151d0 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
151e0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
151f0 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
15200 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
15210 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
15220 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
15230 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
15240 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
15250 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
15260 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
15270 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
15280 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
15290 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
152a0 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
152b0 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
152c0 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
152d0 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
152e0 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
152f0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
15300 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
15310 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
15320 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
15330 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
15340 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
15350 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
15360 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
15370 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
15380 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
15390 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
153a0 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
153b0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
153c0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
153d0 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
153e0 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
153f0 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
15400 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
15410 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
15420 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
15430 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
15440 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
15450 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
15460 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
15470 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
15480 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
15490 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
154a0 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
154b0 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
154c0 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
154d0 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
154e0 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
154f0 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
15500 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
15510 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
15520 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
15530 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
15540 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
15550 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
15560 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
15570 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
15580 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
15590 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
155a0 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
155b0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
155c0 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
155d0 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
155e0 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
155f0 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
15600 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
15610 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
15620 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
15630 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
15640 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
15650 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
15660 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
15670 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
15680 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
15690 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
156a0 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
156b0 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
156c0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
156d0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
156e0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
156f0 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
15700 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
15710 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
15720 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
15730 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
15740 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
15750 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
15760 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
15770 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
15780 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
15790 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
157a0 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
157b0 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
157c0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
157d0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
157e0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
157f0 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
15800 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
15810 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
15820 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
15830 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
15840 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
15850 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
15860 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
15870 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
15880 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
15890 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
158a0 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
158b0 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
158c0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
158d0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
158e0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
158f0 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
15900 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
15910 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
15920 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
15930 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
15940 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
15950 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
15960 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
15970 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
15980 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
15990 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
159a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
159b0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
159c0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
159d0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
159e0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
159f0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
15a00 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
15a10 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
15a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15a30 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
15a40 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
15a50 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
15a60 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
15a70 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
15a80 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
15a90 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
15aa0 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
15ab0 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
15ac0 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
15ad0 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
15ae0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
15af0 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
15b00 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
15b10 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
15b20 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
15b30 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
15b40 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
15b50 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
15b60 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
15b70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
15b80 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
15b90 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
15ba0 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
15bb0 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
15bc0 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
15bd0 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
15be0 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
15bf0 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
15c00 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
15c10 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
15c20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
15c30 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
15c40 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
15c50 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
15c60 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
15c70 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
15c80 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
15c90 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
15ca0 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
15cb0 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
15cc0 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
15cd0 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
15ce0 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
15cf0 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
15d00 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
15d10 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
15d20 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
15d30 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
15d40 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
15d50 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
15d60 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
15d70 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
15d80 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
15d90 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
15da0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
15db0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
15dc0 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
15dd0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
15de0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
15df0 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
15e00 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
15e10 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
15e20 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
15e30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
15e40 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
15e50 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
15e60 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
15e70 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
15e80 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
15e90 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
15ea0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
15eb0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
15ec0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
15ed0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
15ee0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
15ef0 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
15f00 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
15f10 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
15f20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
15f30 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
15f40 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
15f50 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
15f60 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
15f70 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
15f80 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
15f90 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
15fa0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
15fb0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
15fc0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
15fd0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
15fe0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
15ff0 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
16000 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
16010 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
16020 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
16030 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
16040 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
16050 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
16060 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
16070 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
16080 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
16090 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
160a0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
160b0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
160c0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
160d0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
160e0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
160f0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
16100 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
16110 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
16120 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
16130 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
16140 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
16150 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
16160 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
16170 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
16180 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
16190 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
161a0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
161b0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
161c0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
161d0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
161e0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
161f0 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
16200 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
16210 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
16220 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
16230 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
16240 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
16250 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
16260 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
16270 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
16280 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
16290 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
162a0 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
162b0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
162c0 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
162d0 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
162e0 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
162f0 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
16300 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
16310 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
16320 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
16330 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
16340 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
16350 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
16360 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
16370 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
16380 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
16390 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
163a0 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
163b0 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a  )1)<<(n))../*.**
163c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
163d0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
163e0 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
163f0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
16400 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
16410 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
16420 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
16430 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
16440 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
16450 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
16460 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
16470 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
16480 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
16490 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
164a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
164b0 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
164c0 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
164d0 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
164e0 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
164f0 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
16500 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
16510 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
16520 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
16530 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
16540 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
16550 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
16560 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
16570 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
16580 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
16590 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
165a0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
165b0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
165c0 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
165d0 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
165e0 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
165f0 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
16600 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
16610 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
16620 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
16630 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
16640 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
16650 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
16660 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
16670 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
16680 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
16690 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
166a0 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
166b0 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
166c0 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
166d0 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
166e0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
166f0 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
16700 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
16710 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
16720 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
16730 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
16740 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
16750 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
16760 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
16770 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
16780 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
16790 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
167a0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
167b0 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
167c0 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
167d0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
167e0 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
167f0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
16800 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
16810 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16820 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
16830 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
16840 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
16850 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
16860 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
16870 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
16880 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
16890 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
168a0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
168b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
168c0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
168d0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
168e0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
168f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
16900 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
16910 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
16920 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
16930 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
16940 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
16950 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
16960 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
16970 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
16980 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
16990 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
169a0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
169b0 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
169c0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
169d0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
169e0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
169f0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
16a00 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
16a10 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
16a20 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
16a30 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
16a40 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
16a50 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
16a60 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
16a70 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
16a80 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
16a90 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
16aa0 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
16ab0 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
16ac0 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
16ad0 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
16ae0 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
16af0 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
16b00 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
16b10 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
16b20 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
16b30 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
16b40 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
16b50 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73  lause */.    uns
16b60 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
16b70 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
16b80 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
16b90 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
16ba0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
16bb0 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
16bc0 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
16bd0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
16be0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
16bf0 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
16c00 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
16c10 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
16c20 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66   WITH */.#ifndef
16c30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
16c40 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
16c50 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
16c60 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
16c70 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
16c80 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
16c90 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
16ca0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
16cb0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
16cc0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
16cd0 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
16ce0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
16cf0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
16d00 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
16d10 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
16d20 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
16d30 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
16d40 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
16d50 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
16d60 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
16d70 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
16d80 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
16d90 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
16da0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
16db0 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
16dc0 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
16dd0 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
16de0 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
16df0 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
16e00 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
16e10 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
16e20 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
16e30 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
16e40 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
16e50 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
16e60 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
16e70 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
16e80 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
16e90 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
16ea0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
16eb0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
16ec0 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
16ed0 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
16ee0 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
16ef0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16f00 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
16f10 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
16f20 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
16f30 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
16f40 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
16f50 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
16f60 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
16f70 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
16f80 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
16f90 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
16fa0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
16fb0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
16fc0 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
16fd0 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
16fe0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
16ff0 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
17000 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
17010 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
17020 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
17030 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
17040 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
17050 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
17060 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
17070 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
17080 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
17090 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
170a0 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
170b0 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
170c0 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
170d0 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
170e0 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
170f0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
17100 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
17110 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
17120 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
17130 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
17140 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
17150 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
17160 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
17170 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
17180 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
17190 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
171a0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
171b0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
171c0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
171d0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
171e0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
171f0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
17200 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
17210 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
17220 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
17230 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
17240 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
17250 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
17260 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
17270 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
17280 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
17290 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
172a0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
172b0 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
172c0 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
172d0 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
172e0 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
172f0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
17300 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
17310 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
17320 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
17330 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 20 20 20   pTabList */.   
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 20 20 20 20 2f 2a 20 20 20 30 78 30 30         /*   0x00
17360 38 30 20 2f 2f 20 6e 6f 74 20 63 75 72 72 65 6e  80 // not curren
17370 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  tly used */.#def
17380 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
17390 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  Y          0x010
173a0 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
173b0 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
173c0 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
173d0 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
173e0 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70       0x0200 /* p
173f0 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
17400 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
17410 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
17420 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
17430 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20  CT    0x0400 /* 
17440 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
17450 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
17460 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17470 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
17480 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70    0x0800 /* Supp
17490 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
174a0 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
174b0 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50  efine WHERE_REOP
174c0 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31  EN_IDX       0x1
174d0 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73  000 /* Try to us
174e0 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a  e OP_ReopenIdx *
174f0 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
17500 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
17510 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
17520 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
17530 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
17540 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
17550 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
17560 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
17570 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17580 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
17590 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
175a0 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
175b0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
175c0 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
175d0 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
175e0 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
175f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17600 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
17610 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
17620 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
17630 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
17640 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
17650 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
17660 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
17670 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
17680 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
17690 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
176a0 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
176b0 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
176c0 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
176d0 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
176e0 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
176f0 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
17700 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
17710 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
17720 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
17730 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
17740 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
17750 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
17760 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
17770 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
17780 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
17790 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
177a0 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
177b0 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
177c0 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
177d0 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
177e0 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
177f0 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
17800 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
17810 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
17820 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
17830 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
17840 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
17850 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
17860 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
17870 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
17880 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
17890 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
178a0 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
178b0 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
178c0 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
178d0 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
178e0 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
178f0 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
17900 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
17910 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
17920 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
17930 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
17940 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
17950 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
17960 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
17970 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
17980 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
17990 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
179a0 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
179b0 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
179c0 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
179d0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
179e0 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
179f0 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
17a00 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
17a10 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
17a20 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
17a30 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
17a40 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
17a50 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
17a60 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
17a70 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
17a80 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
17a90 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
17aa0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
17ab0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
17ac0 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
17ad0 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
17ae0 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
17af0 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
17b00 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
17b10 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
17b20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
17b30 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
17b40 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
17b50 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
17b60 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
17b70 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
17b80 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
17b90 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
17ba0 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
17bb0 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
17bc0 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
17bd0 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
17be0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
17bf0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17c00 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
17c10 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
17c20 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
17c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17c40 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
17c50 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
17c60 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17c70 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
17c80 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
17c90 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
17ca0 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
17cb0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
17cc0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
17cd0 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
17ce0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
17cf0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20  ld..**.** Note: 
17d00 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75   NC_MinMaxAgg mu
17d10 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  st have the same
17d20 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e   value as SF_Min
17d30 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51  MaxAgg and.** SQ
17d40 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
17d50 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  ..** .*/.#define
17d60 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
17d70 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
17d80 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
17d90 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
17da0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
17db0 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  gg    0x0002  /*
17dc0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
17dd0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17de0 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
17df0 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
17e00 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
17e10 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17e20 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
17e30 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
17e40 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
17e50 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
17e60 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
17e70 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
17e80 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
17e90 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
17ea0 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  010  /* True if 
17eb0 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
17ec0 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
17ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
17ee0 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
17ef0 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
17f00 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
17f10 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
17f20 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
17f30 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
17f40 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
17f50 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
17f60 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
17f70 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
17f80 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
17f90 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
17fa0 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
17fb0 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
17fc0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
17fd0 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
17fe0 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
17ff0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
18000 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
18010 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
18020 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
18030 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
18040 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
18050 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
18060 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
18070 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
18080 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
18090 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
180a0 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
180b0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
180c0 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
180d0 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
180e0 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
180f0 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
18100 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
18110 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
18120 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
18130 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
18140 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
18150 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
18160 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
18170 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
18180 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
18190 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
181a0 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
181b0 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
181c0 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
181d0 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
181e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
181f0 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
18200 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
18210 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
18220 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
18230 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
18240 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
18250 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
18260 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
18270 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
18280 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
18290 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
182a0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
182b0 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
182c0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
182d0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
182e0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
182f0 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
18300 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
18310 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
18320 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
18330 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
18340 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
18350 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
18360 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
18370 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
18380 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
18390 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
183a0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
183b0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
183c0 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
183d0 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
183e0 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
183f0 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
18400 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
18410 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
18420 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
18430 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
18440 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
18450 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
18460 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
18470 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
18480 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
18490 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
184a0 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
184b0 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
184c0 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
184d0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
184e0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
184f0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
18500 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
18510 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
18520 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
18530 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
18540 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
18550 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
18560 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
18570 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
18580 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
18590 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
185a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
185b0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
185c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
185d0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
185e0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
185f0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
18600 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
18610 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
18620 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
18630 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
18640 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
18650 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
18660 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
18670 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
18680 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
18690 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
186a0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
186b0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
186c0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
186d0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
186e0 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
186f0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
18700 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
18710 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
18720 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
18730 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
18740 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
18750 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
18760 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
18770 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
18780 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
18790 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
187a0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
187b0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
187c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
187d0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
187e0 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
187f0 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
18800 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
18810 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
18820 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
18830 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
18840 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
18850 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
18860 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
18870 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
18880 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
18890 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
188a0 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
188b0 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
188c0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
188d0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
188e0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
188f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
18900 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
18910 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
18920 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
18930 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
18940 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
18950 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
18960 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
18970 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
18980 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
18990 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
189a0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
189b0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
189c0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
189d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
189e0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
189f0 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0040  /* Part o
18a00 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
18a10 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
18a20 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
18a30 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
18a40 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
18a50 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
18a60 65 66 69 6e 65 20 53 46 5f 41 6c 6c 56 61 6c 75  efine SF_AllValu
18a70 65 73 20 20 20 20 20 20 20 30 78 30 31 30 30 20  es       0x0100 
18a80 20 2f 2a 20 41 6c 6c 20 74 65 72 6d 73 20 6f 66   /* All terms of
18a90 20 63 6f 6d 70 6f 75 6e 64 20 61 72 65 20 56 41   compound are VA
18aa0 4c 55 45 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LUES */.#define 
18ab0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
18ac0 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61     0x0200  /* Pa
18ad0 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
18ae0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
18af0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
18b00 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20  MaybeConvert    
18b10 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20  0x0400  /* Need 
18b20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
18b30 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
18b40 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
18b50 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 20  Recursive       
18b60 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65 20 72  0x0800  /* The r
18b70 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
18b80 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
18b90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
18ba0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30  inMaxAgg       0
18bb0 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  x1000  /* Aggreg
18bc0 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
18bd0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
18be0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
18bf0 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
18c00 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
18c10 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
18c20 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
18c30 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
18c40 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
18c50 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
18c60 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
18c70 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
18c80 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
18c90 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
18ca0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
18cb0 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
18cc0 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20  ary index .**   
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
18cf0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
18d00 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
18d10 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
18d20 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
18d30 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
18d40 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
18d50 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18d60 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
18d70 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
18d80 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
18d90 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
18da0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
18db0 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
18dc0 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
18dd0 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
18de0 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
18df0 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
18e00 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
18e10 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
18e20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
18e30 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
18e40 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
18e50 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
18e80 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
18e90 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
18ea0 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
18eb0 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
18ec0 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
18ed0 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
18ee0 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
18ef0 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
18f00 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
18f10 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
18f20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
18f30 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
18f40 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
18f50 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
18f60 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
18f70 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
18f80 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
18f90 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
18fa0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
18fb0 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
18fc0 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
18fd0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
19000 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
19010 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
19020 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19030 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
19040 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
19050 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
19060 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19080 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
19090 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
190a0 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
190b0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
190c0 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
190d0 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
190e0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
190f0 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
19120 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
19130 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19140 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20  arm. .**        
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
19160 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
19170 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
19180 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
191b0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
191c0 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
191d0 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
191e0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
191f0 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
19200 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
19210 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
19220 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19230 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
19240 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
19250 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
19260 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19280 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
19290 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
192a0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
192d0 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
192e0 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
192f0 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19310 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
19320 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
19330 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
19340 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
19350 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
19360 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19380 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
19390 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
193a0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
193b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
193c0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
193d0 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
193e0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
193f0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
19400 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19410 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
19420 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
19430 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
19440 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
19470 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
19480 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
19490 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
194a0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
194b0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
194c0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
194d0 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
194e0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
194f0 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
19500 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
19510 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19520 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
19530 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
19540 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
19550 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19570 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
19580 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
19590 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
195c0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
195d0 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
195e0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
195f0 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
19600 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
19610 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
19630 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
19640 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19650 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
19680 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
19690 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
196a0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
196d0 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
196e0 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
196f0 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
19700 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19710 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
19720 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19730 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
19760 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
19770 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
19780 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
197b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
197c0 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
197d0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
197e0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
197f0 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
19800 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19810 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
19820 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
19830 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
19840 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
19870 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
19880 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
19890 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
198a0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
198b0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
198c0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
198d0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
198e0 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
198f0 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
19900 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
19910 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19920 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
19930 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
19940 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
19950 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
19960 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
19970 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
19980 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
19990 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
199a0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
199b0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
199c0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
199d0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
199e0 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
199f0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
19a00 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
19a10 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
19a20 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
19a30 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19a40 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
19a50 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
19a60 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
19a70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
19a80 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
19a90 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
19aa0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
19ab0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
19ac0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
19ad0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
19ae0 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
19af0 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
19b00 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
19b10 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
19b20 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
19b30 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
19b40 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
19b50 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
19b60 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
19b70 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
19b80 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
19b90 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
19ba0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
19bb0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
19bc0 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
19bd0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
19be0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
19bf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
19c00 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
19c10 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
19c20 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
19c30 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
19c40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
19c50 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
19c60 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
19c70 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
19c80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
19c90 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
19ca0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19cb0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
19cc0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
19cd0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
19ce0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
19cf0 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
19d00 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
19d10 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
19d20 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
19d30 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
19d40 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
19d50 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
19d60 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
19d70 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
19d80 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
19d90 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
19da0 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
19db0 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
19dc0 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
19dd0 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
19de0 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
19df0 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
19e00 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
19e10 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
19e20 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
19e30 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
19e40 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
19e50 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
19e60 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
19e70 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
19e80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19e90 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
19ea0 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ted */.  ExprLis
19eb0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
19ec0 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
19ed0 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
19ee0 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
19ef0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
19f00 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
19f10 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
19f20 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
19f30 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
19f40 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
19f50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
19f60 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
19f70 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
19f80 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
19f90 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
19fa0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
19fb0 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
19fc0 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
19fd0 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
19fe0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
19ff0 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1a000 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1a010 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1a020 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1a030 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1a040 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
1a050 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1a060 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1a070 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1a080 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1a090 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1a0a0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1a0b0 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1a0c0 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1a0d0 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1a0e0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1a0f0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1a100 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1a110 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1a120 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1a130 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1a140 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1a150 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1a160 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1a170 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1a180 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1a190 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1a1a0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1a1b0 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1a1c0 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1a1d0 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1a1e0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1a1f0 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1a200 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1a210 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1a220 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1a230 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1a240 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1a250 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1a260 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1a270 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1a280 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1a290 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1a2a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1a2b0 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1a2c0 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
1a2d0 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1a2e0 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1a2f0 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1a300 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1a310 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1a320 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1a330 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1a340 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1a350 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1a360 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1a370 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1a380 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1a390 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1a3a0 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1a3b0 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1a3c0 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1a3d0 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1a3e0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1a3f0 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1a400 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1a410 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1a420 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1a430 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1a440 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1a450 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1a460 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1a470 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1a480 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1a490 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1a4a0 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1a4b0 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1a4c0 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1a4d0 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1a4e0 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1a4f0 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1a500 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1a510 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1a520 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1a530 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1a540 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1a550 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1a560 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1a570 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
1a580 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1a590 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1a5a0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1a5b0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1a5c0 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1a5d0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1a5e0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1a5f0 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1a600 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1a610 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1a620 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1a630 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1a640 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1a650 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1a660 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1a670 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1a680 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1a690 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1a6a0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1a6b0 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1a6c0 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1a6d0 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1a6e0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1a6f0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1a700 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1a710 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1a720 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1a730 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1a740 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1a750 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1a760 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1a770 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1a780 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1a790 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1a7a0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1a7b0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1a7c0 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1a7d0 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1a7e0 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1a7f0 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1a800 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1a810 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1a820 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1a830 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1a840 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1a850 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1a860 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1a870 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1a880 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1a890 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1a8a0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a8b0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1a8c0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1a8d0 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1a8e0 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1a8f0 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1a900 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1a910 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1a920 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1a930 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1a940 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1a950 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1a960 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1a970 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a980 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1a990 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1a9a0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1a9b0 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1a9c0 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1a9d0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1a9e0 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1a9f0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1aa00 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1aa10 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1aa20 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1aa30 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1aa40 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1aa50 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1aa60 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1aa70 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1aa80 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1aa90 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1aaa0 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1aab0 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1aac0 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1aad0 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1aae0 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1aaf0 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1ab00 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1ab10 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1ab20 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1ab30 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1ab40 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1ab50 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1ab60 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1ab70 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1ab80 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1ab90 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1aba0 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1abb0 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1abc0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1abd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1abe0 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1abf0 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1ac00 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1ac10 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1ac20 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  e .** feature is
1ac30 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
1ac40 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
1ac50 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
1ac60 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
1ac70 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1ac80 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
1ac90 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
1aca0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
1acb0 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
1acc0 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
1acd0 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
1ace0 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
1acf0 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
1ad00 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
1ad10 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
1ad20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1ad30 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
1ad40 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
1ad50 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
1ad60 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
1ad70 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
1ad80 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
1ad90 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
1ada0 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
1adb0 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
1adc0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1add0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1ade0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
1adf0 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
1ae00 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
1ae10 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
1ae20 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
1ae30 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
1ae40 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
1ae50 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
1ae60 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
1ae70 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
1ae80 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
1ae90 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
1aea0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1aeb0 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
1aec0 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
1aed0 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
1aee0 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
1aef0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1af00 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
1af10 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
1af20 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
1af30 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
1af40 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1af50 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
1af60 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
1af70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
1af80 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
1af90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1afa0 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
1afb0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
1afc0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
1afd0 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
1afe0 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
1aff0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1b000 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1b010 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
1b020 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
1b030 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
1b040 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69  constants */.  i
1b050 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1b060 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1b070 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1b080 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1b090 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1b0a0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1b0b0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1b0c0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1b0d0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1b0e0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1b0f0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1b100 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1b110 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1b120 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1b130 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1b140 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1b150 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1b160 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b170 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1b180 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1b190 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b1b0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1b1c0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1b1d0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b1f0 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1b200 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1b210 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1b220 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b230 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1b240 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1b250 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1b260 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b270 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1b280 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1b290 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78  [] */.  int iFix
1b2a0 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  edOp;        /* 
1b2b0 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f  Never back out o
1b2c0 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d  pcodes iFixedOp-
1b2d0 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a  1 or earlier */.
1b2e0 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20    int ckBase;   
1b2f0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1b300 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20  egister of data 
1b310 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e  during check con
1b320 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
1b330 74 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20  t iPartIdxTab;  
1b340 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72     /* Table corr
1b350 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70  esponding to a p
1b360 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a  artial index */.
1b370 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1b380 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1b390 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1b3a0 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1b3b0 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1b3c0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1b3d0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1b3e0 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1b3f0 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1b400 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1b410 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1b420 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b430 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1b440 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1b450 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1b460 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1b470 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  els */.  struct 
1b480 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
1b490 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
1b4a0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1b4b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1b4c0 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
1b4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1b4e0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
1b4f0 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
1b500 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
1b510 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
1b520 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
1b530 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
1b540 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
1b550 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
1b560 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
1b570 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
1b580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1b590 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
1b5a0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
1b5b0 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
1b5c0 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
1b5d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
1b5e0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
1b5f0 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
1b600 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
1b610 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
1b620 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
1b630 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
1b640 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
1b650 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ntry */.  ExprLi
1b660 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
1b670 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1b680 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
1b690 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
1b6a0 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
1b6b0 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
1b6c0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
1b6d0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
1b6e0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
1b6f0 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
1b700 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
1b710 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
1b720 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
1b730 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
1b740 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
1b750 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
1b760 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
1b770 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
1b780 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
1b790 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
1b7a0 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
1b7b0 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
1b7c0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1b7d0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
1b7e0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
1b7f0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
1b800 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
1b810 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1b820 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
1b830 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
1b840 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
1b850 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
1b860 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
1b870 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
1b880 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
1b890 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1b8a0 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e  ACE_ENABLED.  in
1b8b0 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
1b8c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b8d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b8e0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1b8f0 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20  nSelectIndent;  
1b900 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69   /* How far to i
1b910 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43  ndent SELECTTRAC
1b920 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  E() output */.#e
1b930 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1b940 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1b950 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1b960 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1b970 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1b980 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1b990 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1b9a0 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1b9b0 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1b9c0 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1b9d0 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1b9e0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1b9f0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1ba00 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1ba10 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1ba20 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  unters */..  /* 
1ba30 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
1ba40 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
1ba50 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
1ba60 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
1ba70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
1ba80 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
1ba90 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
1baa0 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
1bab0 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
1bac0 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
1bad0 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
1bae0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
1baf0 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
1bb00 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1bb10 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1bb20 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
1bb30 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61  TABLE */.  int a
1bb40 64 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20 20  ddrSkipPK;      
1bb50 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69 6e  /* Address of in
1bb60 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69  struction to ski
1bb70 70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  p PRIMARY KEY in
1bb80 64 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  dex */.  u32 nQu
1bb90 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1bba0 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1bbb0 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1bbc0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1bbd0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1bbe0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1bbf0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1bc00 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1bc10 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1bc20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1bc30 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1bc40 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1bc50 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1bc60 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1bc70 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1bc80 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1bc90 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1bca0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1bcb0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1bcc0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1bcd0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1bce0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1bcf0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1bd00 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1bd10 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1bd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1bd60 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1bd70 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1bd80 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1bd90 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1bda0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1bdb0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1bdc0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1bdd0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1bde0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1bdf0 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1be00 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1be10 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1be20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1be30 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1be40 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1be50 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1be60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bea0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e  ******/..  int n
1beb0 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1bec0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bed0 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1bee0 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1bef0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1bf00 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1bf10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bf20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1bf30 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1bf40 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1bf50 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1bf60 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1bf70 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1bf80 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65  KEY */.  u8 bFre
1bf90 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  eWith;          
1bfa0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57     /* True if pW
1bfb0 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72  ith should be fr
1bfc0 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72 20  eed with parser 
1bfd0 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bff0 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
1c000 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
1c010 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
1c020 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1c030 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c040 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
1c050 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
1c060 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
1c070 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
1c080 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
1c090 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
1c0a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c0b0 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
1c0c0 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
1c0d0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c  #endif.  int nAl
1c0e0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
1c0f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c100 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73  aliased result s
1c110 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1c120 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
1c130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
1c140 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
1c150 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
1c160 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
1c170 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1c180 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
1c190 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
1c1a0 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
1c1b0 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
1c1c0 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
1c1d0 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
1c1e0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
1c1f0 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
1c200 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
1c210 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1c220 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a  .#endif.  char *
1c230 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
1c240 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20      /* Pointers 
1c250 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61  to names of para
1c260 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  meters */.  Vdbe
1c270 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
1c280 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
1c290 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
1c2a0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
1c2b0 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
1c2c0 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
1c2d0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
1c2e0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
1c2f0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
1c300 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
1c310 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
1c320 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
1c330 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
1c340 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1c350 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
1c360 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
1c370 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
1c380 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
1c390 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
1c3a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1c3b0 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
1c3c0 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
1c3d0 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
1c3e0 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  acks */.  Token 
1c3f0 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
1c400 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
1c410 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
1c420 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
1c430 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73   */.  Token sLas
1c440 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  tToken;         
1c450 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
1c460 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  n parsed */.#ifn
1c470 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c480 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
1c490 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
1c4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1c4b0 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
1c4c0 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
1c4d0 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
1c4e0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
1c4f0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
1c500 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
1c510 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
1c520 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
1c530 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
1c540 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
1c550 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
1c560 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
1c570 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
1c580 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
1c590 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
1c5a0 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
1c5b0 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
1c5c0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
1c5d0 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
1c5e0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1c5f0 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  L */.};../*.** R
1c600 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
1c610 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
1c620 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
1c630 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
1c640 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1c650 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1c660 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
1c670 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
1c680 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
1c690 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
1c6a0 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
1c6b0 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
1c6c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1c6d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1c6e0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
1c6f0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
1c700 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
1c710 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
1c720 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
1c730 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
1c740 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
1c750 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
1c760 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
1c770 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
1c780 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
1c790 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
1c7a0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
1c7b0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
1c7c0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1c7d0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
1c7e0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
1c7f0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
1c800 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
1c810 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
1c820 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  codes..*/.#defin
1c830 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1c840 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1c850 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1c860 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
1c870 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
1c880 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
1c890 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1c8a0 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
1c8b0 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
1c8c0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1c8d0 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1c8e0 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1c8f0 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1c900 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c910 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1c920 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1c930 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1c940 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1c950 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1c960 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1c970 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1c980 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1c990 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1c9a0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1c9b0 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1c9c0 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1c9d0 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1c9e0 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
1c9f0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
1ca00 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
1ca10 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1ca20 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
1ca30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1ca40 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
1ca50 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
1ca60 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1ca70 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
1ca80 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
1ca90 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
1caa0 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
1cab0 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
1cac0 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
1cad0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
1cae0 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20  SREG       0x02 
1caf0 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
1cb00 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
1cb10 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
1cb20 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
1cb30 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
1cb40 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
1cb50 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
1cb60 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  ation */../*. * 
1cb70 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
1cb80 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
1cb90 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
1cba0 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
1cbb0 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
1cbc0 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20  t Trigger. . *. 
1cbd0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
1cbe0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
1cbf0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
1cc00 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
1cc10 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
1cc20 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
1cc30 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
1cc40 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
1cc50 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a  represents the .
1cc60 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
1cc70 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
1cc80 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
1cc90 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
1cca0 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
1ccb0 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
1ccc0 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
1ccd0 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
1cce0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
1ccf0 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
1cd00 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
1cd10 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
1cd20 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1cd30 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1cd40 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
1cd50 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
1cd60 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
1cd70 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
1cd80 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
1cd90 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
1cda0 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
1cdb0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
1cdc0 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1cdd0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
1cde0 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
1cdf0 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
1ce00 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
1ce10 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
1ce20 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
1ce30 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
1ce40 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ce60 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
1ce70 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
1ce90 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
1cea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1ceb0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
1cec0 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
1ced0 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
1cee0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1cef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1cf00 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1cf10 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1cf20 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
1cf30 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
1cf40 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1cf50 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
1cf60 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
1cf70 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1cf80 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1cf90 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
1cfa0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
1cfb0 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
1cfc0 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
1cfd0 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
1cfe0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
1cff0 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
1d000 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d030 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
1d040 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
1d050 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1d060 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
1d070 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1d080 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
1d090 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
1d0a0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
1d0b0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1d0c0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
1d0d0 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
1d0e0 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
1d0f0 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
1d100 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
1d110 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
1d120 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
1d130 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
1d140 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
1d150 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
1d160 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
1d170 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
1d180 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
1d190 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
1d1a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
1d1b0 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
1d1c0 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a  ne which. .**.**
1d1d0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75   If there are mu
1d1e0 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c  ltiple triggers,
1d1f0 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f   you might of so
1d200 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f  me BEFORE and so
1d210 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20  me AFTER..** In 
1d220 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20  that cases, the 
1d230 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20  constants below 
1d240 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65  can be ORed toge
1d250 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
1d260 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20   TRIGGER_BEFORE 
1d270 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47   1.#define TRIGG
1d280 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a  ER_AFTER   2../*
1d290 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
1d2a0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1d2b0 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f  rStep is used to
1d2c0 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20   store a single 
1d2d0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a  SQL statement. *
1d2e0 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20   that is a part 
1d2f0 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  of a trigger-pro
1d300 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73  gram. . *. * Ins
1d310 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1d320 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
1d330 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
1d340 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
1d350 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
1d360 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
1d370 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
1d380 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
1d390 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
1d3a0 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20   . * associated 
1d3b0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
1d3c0 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
1d3d0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
1d3e0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
1d3f0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
1d400 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
1d410 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20  r-program.. * . 
1d420 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
1d430 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
1d440 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
1d450 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
1d460 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
1d470 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
1d480 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
1d490 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
1d4a0 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
1d4b0 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20  ined by the . * 
1d4c0 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
1d4d0 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
1d4e0 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
1d4f0 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
1d500 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
1d510 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
1d520 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
1d530 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1d540 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1d550 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
1d560 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1d570 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1d580 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
1d590 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
1d5a0 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
1d5b0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61  wise NULL.. * ta
1d5c0 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1d5d0 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1d5e0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1d5f0 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
1d600 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
1d610 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
1d620 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1d630 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
1d640 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1d650 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1d660 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
1d670 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
1d680 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
1d690 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
1d6a0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1d6b0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1d6c0 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
1d6d0 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20  >) VALUES ... . 
1d6e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
1d6f0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
1d700 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
1d710 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
1d720 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1d730 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
1d740 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1d750 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67  _DELETE). * targ
1d760 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1d770 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1d780 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1d790 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
1d7a0 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
1d7b0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1d7c0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
1d7d0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
1d7e0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1d7f0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1d800 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1d810 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d  LL.. * . * (op =
1d820 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
1d830 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1d840 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1d850 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1d860 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
1d870 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20  ate rows of.. * 
1d880 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1d890 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1d8a0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1d8b0 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1d8c0 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1d8d0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1d8e0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
1d8f0 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
1d900 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
1d910 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
1d920 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
1d930 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
1d940 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
1d950 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
1d960 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
1d970 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
1d980 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
1d990 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a    argument.. * .
1d9a0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1d9b0 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
1d9c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d9d0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1d9e0 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1d9f0 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
1da00 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
1da10 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
1da20 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
1da30 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
1da40 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
1da50 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
1da60 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
1da70 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
1da80 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1da90 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1daa0 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
1dab0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45  NSERT INTO .. SE
1dac0 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f  LECT ... */.  To
1dad0 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20  ken target;     
1dae0 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
1daf0 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
1db00 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
1db10 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1db20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1db30 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1db40 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
1db50 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
1db60 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
1db70 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
1db80 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20  or UPDATE. */.  
1db90 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
1dba0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
1dbb0 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
1dbc0 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1dbd0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1dbe0 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69  t in the link-li
1dbf0 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  st */.  TriggerS
1dc00 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20  tep *pLast;  /* 
1dc10 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  Last element in 
1dc20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64  link-list. Valid
1dc30 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e   for 1st elem on
1dc40 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ly */.};../*.** 
1dc50 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
1dc60 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1dc70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
1dc80 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46  d by the sqliteF
1dc90 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65  ix....** routine
1dca0 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74  s as they walk t
1dcb0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f  he parse tree to
1dcc0 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72   make database r
1dcd0 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70  eferences.** exp
1dce0 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65  licit.  .*/.type
1dcf0 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
1dd00 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
1dd10 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
1dd20 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1dd30 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
1dd40 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
1dd50 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
1dd60 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
1dd70 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
1dd80 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
1dd90 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
1dda0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
1ddb0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
1ddc0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
1ddd0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
1dde0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1ddf0 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
1de00 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
1de10 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
1de20 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
1de30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1de40 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
1de50 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1de60 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1de70 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
1de80 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
1de90 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
1dea0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1deb0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1dec0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
1ded0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
1dee0 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
1def0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
1df00 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
1df10 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
1df20 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
1df30 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
1df40 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
1df50 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
1df60 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
1df70 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1df80 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
1df90 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
1dfa0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
1dfb0 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
1dfc0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
1dfd0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
1dfe0 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
1dff0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
1e000 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1e010 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
1e020 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1e030 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  t  nChar;       
1e040 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
1e050 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
1e060 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c  r */.  int  nAll
1e070 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
1e080 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
1e090 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
1e0a0 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c  t */.  int  mxAl
1e0b0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
1e0c0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73  aximum allowed s
1e0d0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1e0e0 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63    u8   useMalloc
1e0f0 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e  ;      /* 0: non
1e100 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62  e,  1: sqlite3Db
1e110 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69  Malloc,  2: sqli
1e120 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20  te3_malloc */.  
1e130 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
1e140 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
1e150 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
1e160 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a  UM_TOOBIG */.};.
1e170 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1e180 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69  _NOMEM   1.#defi
1e190 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  ne STRACCUM_TOOB
1e1a0 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  IG  2../*.** A p
1e1b0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
1e1c0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
1e1d0 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
1e1e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
1e1f0 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
1e200 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
1e210 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
1e220 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
1e230 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1e240 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
1e250 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
1e260 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
1e270 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1e280 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
1e290 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
1e2a0 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
1e2b0 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
1e2d0 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
1e2e0 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
1e2f0 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
1e300 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
1e310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1e320 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
1e330 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
1e340 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
1e350 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
1e360 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
1e370 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
1e380 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
1e390 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
1e3a0 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
1e3b0 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
1e3c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1e3d0 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
1e3e0 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
1e3f0 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
1e400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1e410 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
1e420 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
1e430 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1e460 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
1e470 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
1e480 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
1e490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1e4a0 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
1e4b0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1e4c0 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
1e4f0 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
1e500 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
1e510 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e530 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
1e540 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
1e550 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d  scans */.  int m
1e560 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e580 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
1e590 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e  ength */.  int n
1e5a0 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20  everCorrupt;    
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e5c0 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61  Database is alwa
1e5d0 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a  ys well-formed *
1e5e0 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73  /.  int szLookas
1e5f0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1e600 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1e610 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1e620 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  r size */.  int 
1e630 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  nLookaside;     
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e650 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1e660 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20  de buffer count 
1e670 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
1e680 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
1e690 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
1e6a0 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
1e6b0 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
1e6c0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1e6d0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
1e6e0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
1e6f0 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
1e700 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1e710 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
1e720 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
1e730 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
1e740 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
1e750 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
1e780 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
1e790 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7b0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
1e7c0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
1e7d0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
1e7e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
1e7f0 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
1e800 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
1e810 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1e820 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
1e830 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
1e840 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
1e850 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
1e860 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
1e870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1e880 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
1e890 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
1e8a0 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  *pScratch;      
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e8c0 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a  Scratch memory *
1e8d0 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63  /.  int szScratc
1e8e0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1e8f0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1e900 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75   each scratch bu
1e910 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ffer */.  int nS
1e920 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1e930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e940 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68  umber of scratch
1e950 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
1e960 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
1e990 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1e9a0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1e9c0 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
1e9d0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1e9e0 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ea10 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
1ea20 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
1ea30 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
1ea40 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
1ea50 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
1ea60 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
1ea70 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
1ea80 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
1ea90 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
1eaa0 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1eab0 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
1eac0 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
1eaf0 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
1eb00 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
1eb10 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
1eb20 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
1eb30 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
1eb40 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
1eb50 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
1eb60 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
1eb70 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1eba0 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
1ebb0 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
1ebc0 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
1ebd0 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
1ebe0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
1ebf0 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
1ec00 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
1ec10 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
1ec20 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1ec30 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ec40 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
1ec50 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1ec60 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
1ec70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ec80 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1ec90 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1eca0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1ecb0 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ecd0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1ece0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1ecf0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
1ed00 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1ed10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ed20 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
1ed30 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
1ed40 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
1ed50 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1ed60 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
1ed70 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
1ed80 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
1ed90 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
1eda0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1edb0 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
1edc0 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
1edd0 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
1ee00 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
1ee10 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1ee20 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
1ee30 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
1ee40 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
1ee50 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
1ee60 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
1ee70 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
1ee80 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
1ee90 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
1eea0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
1eeb0 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
1eec0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
1eed0 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
1eee0 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
1eef0 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
1ef00 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
1ef10 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
1ef20 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
1ef30 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
1ef40 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53  ch)(void*,int iS
1ef50 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c  rcLine,u8 eThis,
1ef60 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c  u8 eMx);  /* Cal
1ef70 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
1ef80 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b  *pVdbeBranchArg;
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
1efc0 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ment */.#endif.#
1efd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1efe0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
1eff0 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
1f000 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
1f010 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
1f020 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
1f030 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
1f040 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
1f050 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
1f060 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
1f070 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
1f080 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  lls */.};../*.**
1f090 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
1f0a0 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
1f0b0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1f0c0 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
1f0d0 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
1f0e0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
1f0f0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
1f100 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
1f110 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
1f120 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
1f130 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
1f140 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
1f150 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
1f160 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
1f170 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
1f180 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
1f190 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
1f1a0 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
1f1b0 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
1f1c0 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
1f1d0 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
1f1e0 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
1f1f0 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
1f200 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
1f210 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
1f220 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
1f230 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
1f240 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
1f250 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
1f260 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
1f270 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1f280 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
1f290 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
1f2a0 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
1f2b0 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1f2c0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
1f2d0 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
1f2e0 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
1f2f0 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
1f300 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
1f310 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
1f320 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
1f330 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
1f340 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  lker {.  int (*x
1f350 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
1f360 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
1f370 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
1f380 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
1f390 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
1f3a0 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
1f3b0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
1f3c0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
1f3d0 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
1f3e0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1f3f0 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
1f400 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
1f410 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1f420 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  CTs */.  Parse *
1f430 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f450 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
1f460 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
1f470 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f4a0 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
1f4b0 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f4e0 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
1f4f0 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
1f500 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1f530 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1f540 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1f550 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1f580 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1f590 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75          /* A cou
1f5c0 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
1f5d0 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
1f600 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1f610 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1f620 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1f630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1f640 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1f650 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
1f660 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f680 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
1f690 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1f6a0 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1f6b0 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1f6c0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1f6d0 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1f6e0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1f6f0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1f700 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1f710 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1f720 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1f730 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1f740 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1f750 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1f760 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1f770 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1f780 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1f790 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1f7a0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1f7b0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1f7c0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1f7d0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1f7e0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1f7f0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1f800 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1f810 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1f820 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1f830 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1f840 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1f850 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1f860 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1f870 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1f880 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1f890 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1f8a0 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1f8b0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1f8c0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1f8d0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
1f8e0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
1f8f0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
1f900 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
1f910 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
1f920 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
1f930 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
1f940 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
1f950 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f970 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
1f980 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1f990 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
1f9a0 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
1f9b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
1f9c0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
1f9d0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1f9e0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa00 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
1fa10 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1fa20 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
1fa30 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fa50 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
1fa60 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
1fa70 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
1fa80 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
1fa90 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
1faa0 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
1fab0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
1fac0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
1fad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1fae0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
1faf0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
1fb00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b  onst char *zErr;
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fb20 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
1fb30 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
1fb40 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
1fb50 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
1fb60 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
1fb70 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1fb80 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
1fb90 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
1fba0 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
1fbb0 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
1fbc0 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
1fbd0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
1fbe0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
1fbf0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
1fc00 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
1fc10 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
1fc30 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
1fc40 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
1fc50 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
1fc60 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
1fc70 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
1fc80 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
1fc90 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
1fca0 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
1fcb0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
1fcc0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
1fcd0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
1fce0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
1fcf0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1fd00 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
1fd10 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
1fd20 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
1fd30 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
1fd40 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
1fd50 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
1fd60 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
1fd90 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1fdc0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
1fdd0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
1fde0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
1fdf0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1fe30 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
1fe40 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
1fe50 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
1fe60 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
1fe70 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
1fe80 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
1fe90 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
1fea0 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
1feb0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
1fec0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
1fed0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
1fee0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
1fef0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
1ff00 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
1ff10 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
1ff20 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
1ff30 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
1ff40 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
1ff50 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
1ff60 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
1ff70 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
1ff80 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
1ff90 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1ffa0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1ffb0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1ffc0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
1ffd0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
1ffe0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
1fff0 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
20000 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
20010 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
20020 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
20030 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
20040 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
20050 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
20060 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
20070 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
20080 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
20090 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
200a0 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
200b0 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
200c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
200d0 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
200e0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
200f0 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
20100 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
20110 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
20120 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
20130 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
20140 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
20150 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20160 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
20170 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
20180 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
20190 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
201a0 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
201b0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
201c0 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
201d0 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
201e0 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
201f0 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
20200 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
20210 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
20220 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
20230 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
20240 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20250 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
20260 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
20270 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
20280 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
20290 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
202a0 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
202b0 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
202c0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
202d0 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
202e0 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
202f0 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
20300 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
20310 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
20320 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
20330 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
20340 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
20350 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
20360 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
20370 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
20380 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
20390 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
203a0 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
203b0 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
203c0 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
203d0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
203e0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
203f0 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
20400 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
20410 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
20420 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20430 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
20440 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20450 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
20460 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20470 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20480 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
20490 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
204a0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
204b0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
204c0 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
204d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
204e0 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
204f0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20500 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20510 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
20520 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
20530 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
20540 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20550 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
20560 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20570 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
20580 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20590 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
205a0 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
205b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
205c0 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
205d0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
205e0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
205f0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
20600 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
20610 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20620 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20630 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
20640 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
20650 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
20660 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
20670 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
20680 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20690 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
206a0 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
206b0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
206c0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
206d0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
206e0 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
206f0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20700 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20710 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
20720 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
20730 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
20740 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  dif.int sqlite3I
20750 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a  sIdChar(u8);../*
20760 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
20770 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
20780 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
20790 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
207a0 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
207b0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
207c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
207d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
207e0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
207f0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
20800 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
20810 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20820 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
20830 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
20840 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
20850 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
20860 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
20870 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
20880 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
20890 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
208a0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
208b0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
208c0 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
208d0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
208e0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
208f0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
20900 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20910 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
20920 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
20930 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
20940 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
20950 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
20960 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20970 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20980 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
20990 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
209a0 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
209b0 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
209c0 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
209d0 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
209e0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
209f0 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
20a00 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
20a10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
20a20 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
20a30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
20a40 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
20a50 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
20a60 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
20a70 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
20a80 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
20a90 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
20aa0 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f  efault(void);.vo
20ab0 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
20ac0 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
20ad0 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
20ae0 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74   (*)(void));.int
20af0 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
20b00 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
20b10 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
20b20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
20b30 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
20b40 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
20b50 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
20b60 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
20b70 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
20b80 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
20b90 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
20ba0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
20bb0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
20bc0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
20bd0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
20be0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
20bf0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
20c00 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
20c10 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
20c20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20c30 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
20c40 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
20c50 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20c60 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
20c70 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20c80 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
20c90 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
20ca0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20cb0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
20cc0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
20cd0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
20ce0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
20cf0 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
20d00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20d10 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
20d20 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
20d30 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
20d40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20d50 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
20d60 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
20d70 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
20d80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20d90 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
20da0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
20db0 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
20dc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
20dd0 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
20de0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
20df0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
20e00 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
20e10 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
20e20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
20e30 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
20e40 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
20e50 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
20e60 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
20e70 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
20e80 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
20e90 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20ea0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
20eb0 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
20ec0 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
20ed0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
20ee0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
20ef0 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
20f00 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
20f10 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
20f20 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
20f30 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
20f40 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
20f50 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
20f60 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  oid);.#endif..in
20f70 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  t sqlite3StatusV
20f80 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
20f90 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64  sqlite3StatusAdd
20fa0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
20fb0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
20fc0 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  t(int, int);..#i
20fd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20fe0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
20ff0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
21000 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
21010 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21020 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
21030 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
21040 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
21050 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
21060 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
21070 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
21080 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
21090 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
210a0 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
210b0 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
210c0 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
210d0 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
210e0 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
21110 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
21120 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
21130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21140 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
21150 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
21160 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
21170 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
21180 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
21190 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e  es */.};..#defin
211a0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
211b0 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64  INTERNAL 0x01.#d
211c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
211d0 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
211e0 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  2.void sqlite3VX
211f0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
21200 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
21210 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
21220 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
21230 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32  f(StrAccum*, u32
21240 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21250 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
21260 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
21270 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
21280 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
21290 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
212a0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
212b0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72  , va_list);.char
212c0 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
212d0 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a  f(sqlite3*,char*
212e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  ,const char*,...
212f0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
21300 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64  QLITE_TEST) || d
21310 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
21320 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
21330 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
21340 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
21350 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
21360 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
21370 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
21380 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
21390 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
213a0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
213b0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
213c0 20 54 72 65 65 56 69 65 77 20 2a 73 71 6c 69 74   TreeView *sqlit
213d0 65 33 54 72 65 65 56 69 65 77 50 75 73 68 28 54  e3TreeViewPush(T
213e0 72 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20 20  reeView*,u8);.  
213f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21400 56 69 65 77 50 6f 70 28 54 72 65 65 56 69 65 77  ViewPop(TreeView
21410 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
21420 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28 54  e3TreeViewLine(T
21430 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
21440 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76  char*, ...);.  v
21450 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
21460 69 65 77 49 74 65 6d 28 54 72 65 65 56 69 65 77  iewItem(TreeView
21470 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
21480 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
21490 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
214a0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
214b0 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
214c0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
214d0 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65  iewExprList(Tree
214e0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
214f0 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73  rList*, u8, cons
21500 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
21510 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
21520 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a  Select(TreeView*
21530 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c  , const Select*,
21540 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
21550 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
21560 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
21570 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
21580 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
21590 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
215a0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
215b0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
215c0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
215d0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
215e0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
215f0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
21600 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
21610 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
21620 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
21630 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
21640 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
21650 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
21660 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
21670 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
21680 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
21690 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
216a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
216b0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
216c0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
216d0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
216e0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
216f0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
21700 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
21710 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
21720 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
21730 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
21740 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
21750 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
21760 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
21770 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
21780 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21790 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
217a0 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
217b0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
217c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
217d0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
217e0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
217f0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
21800 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
21810 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
21820 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
21830 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
21840 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
21850 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
21860 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
21870 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
21880 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
21890 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
218a0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
218b0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
218c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
218d0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
218e0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
218f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21900 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
21910 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
21920 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
21930 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
21940 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
21950 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
21960 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21970 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
21980 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
21990 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
219a0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
219b0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
219c0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
219d0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
219e0 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
219f0 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
21a00 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
21a10 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
21a20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21a30 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
21a40 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
21a50 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
21a60 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
21a70 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
21a80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
21a90 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
21aa0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
21ab0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
21ac0 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
21ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
21ae0 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
21af0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
21b00 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
21b10 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
21b20 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
21b30 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
21b40 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
21b50 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
21b60 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
21b70 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
21b80 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
21b90 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
21ba0 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
21bb0 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
21bc0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
21bd0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
21be0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21bf0 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
21c00 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
21c10 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
21c20 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
21c30 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
21c40 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
21c50 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
21c60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21c70 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
21c80 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
21c90 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
21ca0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
21cb0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
21cc0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21cd0 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
21ce0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
21cf0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21d00 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
21d10 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
21d20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
21d30 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
21d40 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
21d50 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
21d60 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
21d70 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
21d80 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
21d90 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
21da0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
21db0 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
21dc0 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
21dd0 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
21de0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
21df0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
21e00 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
21e10 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  se *);..#ifdef S
21e20 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
21e30 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65  IN_TEST.# define
21e40 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
21e50 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
21e60 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
21e70 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
21e80 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
21e90 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
21ea0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
21eb0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
21ec0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
21ed0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21ee0 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
21ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
21f00 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
21f10 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
21f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
21f30 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
21f40 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
21f50 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
21f60 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
21f70 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
21f80 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
21f90 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
21fa0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
21fb0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
21fc0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
21fd0 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
21fe0 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
21ff0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
22000 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
22010 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
22020 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
22030 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
22040 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
22050 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
22060 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
22070 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
22080 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
22090 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
220a0 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
220b0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
220c0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
220d0 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
220e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
220f0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
22100 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
22110 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
22120 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
22130 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
22140 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
22150 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
22160 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
22170 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
22180 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
22190 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
221a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
221b0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
221c0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
221d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
221e0 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
221f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22200 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22210 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
22220 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
22230 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
22240 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
22250 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
22260 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22270 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
22280 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
22290 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
222a0 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
222b0 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
222c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
222d0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
222e0 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
222f0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
22300 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
22310 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
22320 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
22330 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
22340 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
22350 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
22360 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
22370 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
22380 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
22390 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
223a0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
223b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
223c0 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
223d0 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
223e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
223f0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
22400 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
22410 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
22420 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
22430 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
22440 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
22450 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
22460 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
22470 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
22480 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
22490 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
224a0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
224b0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
224e0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
224f0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
22500 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
22510 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
22520 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
22530 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ken *);.int sqli
22540 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
22550 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
22560 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
22570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22580 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
22590 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
225a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
225b0 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
225c0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
225d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
225e0 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
225f0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
22600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
22610 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
22620 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
22630 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
22640 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
22650 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
22660 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65  nt,char**);.Inde
22670 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
22680 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
22690 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
226a0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
226b0 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226d0 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
226e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
226f0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
22700 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
22710 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
22720 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
22730 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
22740 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
22750 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
22760 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
22770 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
22780 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
227b0 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
227c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
227d0 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
227e0 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
227f0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
22800 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
22810 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
22820 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
22830 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
22840 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
22850 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
22860 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
22870 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
22880 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
22890 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
228a0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
228b0 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
228c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
228d0 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
228e0 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
228f0 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
22900 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
22910 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
22920 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
22930 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
22940 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
22950 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
22960 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
22970 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
22980 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
22990 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
229a0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
229b0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
229c0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
229d0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
229e0 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
229f0 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
22a00 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
22a10 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65  u64 sqlite3Where
22a20 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
22a30 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22a40 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
22a50 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
22a60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22a70 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
22a80 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22a90 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
22aa0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
22ab0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22ac0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
22ad0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22ae0 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
22af0 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
22b00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22b10 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
22b20 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
22b30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22b40 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
22b50 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22b60 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
22b70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22b80 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
22b90 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
22ba0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
22bb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22bc0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
22bd0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
22be0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22bf0 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
22c00 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
22c10 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22c20 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
22c30 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
22c40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22c50 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
22c60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22c70 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
22c80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22c90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22ca0 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
22cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22cc0 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
22cd0 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
22ce0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22cf0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
22d00 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22d20 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
22d30 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22d40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22d50 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
22d60 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
22d70 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
22d80 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
22d90 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
22da0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
22db0 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
22dc0 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
22dd0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22de0 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
22df0 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
22e00 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
22e10 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
22e20 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
22e30 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38  prList*, int, u8
22e40 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
22e50 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
22e60 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
22e70 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
22e80 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
22e90 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
22ea0 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
22eb0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
22ec0 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  erms */.void sql
22ed0 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
22ee0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
22ef0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22f00 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
22f10 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22f20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
22f30 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
22f40 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
22f50 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
22f60 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
22f70 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
22f80 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
22f90 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
22fa0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
22fb0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
22fc0 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
22fd0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
22fe0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
22ff0 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
23000 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
23010 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23020 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
23030 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
23040 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
23050 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
23060 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
23070 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
23080 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
23090 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
230a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
230b0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
230c0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
230d0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
230e0 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
230f0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
23100 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
23110 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
23120 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
23130 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
23140 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
23150 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
23160 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
23170 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
23180 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
23190 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20  liesExpr(Expr*, 
231a0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
231b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
231c0 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
231d0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
231e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
231f0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
23200 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
23210 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
23220 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
23230 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
23240 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
23250 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
23260 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  be(Parse*);.void
23270 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
23280 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
23290 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
232a0 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
232b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
232c0 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
232d0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
232e0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
232f0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
23300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23310 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
23320 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
23330 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
23340 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
23350 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
23360 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
23370 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
23380 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
23390 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
233a0 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
233b0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
233c0 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
233d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
233e0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
233f0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
23400 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
23410 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
23420 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
23430 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
23440 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
23450 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
23460 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
23470 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
23480 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
23490 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
234a0 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
234b0 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
234c0 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
234d0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
234e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
234f0 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
23500 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
23510 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
23520 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
23530 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23540 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
23550 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
23560 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
23570 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
23580 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
23590 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
235a0 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a  RowDelete(Parse*
235b0 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
235c0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
235d0 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  ,u8,u8,u8);.void
235e0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
235f0 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
23600 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
23610 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a  nt, int, int*);.
23620 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
23630 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
23640 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
23650 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
23660 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
23670 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
23680 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
23690 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
236a0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
236b0 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
236c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
236d0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
236e0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23700 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
23710 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  t,int*);.void sq
23720 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
23730 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
23740 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
23750 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
23760 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
23770 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
23780 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
23790 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a  *, int, int, u8*
237a0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
237b0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
237c0 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
237d0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
237e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
237f0 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
23800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
23810 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
23820 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
23830 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
23840 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
23850 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
23860 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
23870 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
23880 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
23890 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
238a0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
238b0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
238c0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
238d0 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
238e0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
238f0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
23900 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
23910 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
23920 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
23930 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
23940 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
23950 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
23960 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
23970 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
23980 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
23990 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
239a0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
239b0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
239c0 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71  _ENABLED.void sq
239d0 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
239e0 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74  me(Select*,const
239f0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
23a00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
23a10 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42  electSetName(A,B
23a20 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
23a30 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
23a40 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
23a50 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
23a60 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
23a70 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
23a80 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
23a90 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  t,int,u8,u8);.vo
23aa0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23ab0 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
23ac0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ns(sqlite3*);.vo
23ad0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23ae0 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
23af0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
23b00 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47  sqlite3RegisterG
23b10 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76  lobalFunctions(v
23b20 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
23b30 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
23b40 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
23b50 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
23b60 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
23b70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23b80 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
23b90 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
23ba0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23bb0 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
23bc0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
23bd0 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
23be0 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
23bf0 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
23c00 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
23c10 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
23c20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23c30 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
23c40 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
23c50 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
23c60 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
23c70 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
23c80 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
23ca0 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
23cb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
23cc0 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
23cd0 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
23ce0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
23cf0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
23d00 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
23d10 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
23d20 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
23d30 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
23d40 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
23d50 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
23d60 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
23d70 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
23d80 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
23d90 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
23da0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
23db0 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
23dc0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
23dd0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
23de0 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
23df0 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
23e00 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
23e10 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
23e40 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
23e50 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
23e60 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
23e70 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
23e80 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
23e90 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
23ea0 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
23eb0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23ec0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
23ed0 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
23ee0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
23ef0 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
23f00 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
23f10 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23f20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
23f30 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
23f40 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
23f50 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
23f60 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
23f70 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
23f80 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fb0 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
23fc0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
23fd0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
23fe0 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
23ff0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
24000 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
24010 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
24020 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
24030 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
24040 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
24050 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24060 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
24070 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
24080 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24090 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
240a0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
240b0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
240c0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
240d0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
240e0 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
240f0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
24100 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
24110 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
24120 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
24130 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
24140 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
24150 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
24160 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
24170 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
24180 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
24190 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
241a0 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
241b0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
241c0 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
241d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
241e0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
241f0 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
24200 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
24210 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
24220 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
24230 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24240 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
24250 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
24260 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24270 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
24280 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
24290 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
242a0 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
242b0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
242c0 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
242d0 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
242e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
242f0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
24300 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
24310 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
24320 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
24330 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
24340 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
24350 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
24360 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
24370 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
24380 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
24390 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
243a0 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
243b0 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
243c0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
243d0 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
243e0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
243f0 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
24400 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
24410 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
24420 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
24430 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
24440 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
24450 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
24460 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
24470 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
24480 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
24490 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
244a0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
244b0 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
244c0 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
244d0 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
244e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
244f0 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
24500 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
24510 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
24520 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
24530 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
24540 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
24550 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
24560 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
24570 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
24580 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
24590 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
245a0 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
245b0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
245c0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
245d0 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
245e0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
245f0 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
24600 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
24610 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
24620 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
24630 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
24640 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
24650 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
24660 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
24670 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
24680 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
24690 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
246a0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
246b0 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
246c0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
246d0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
246e0 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
246f0 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
24700 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
24710 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
24720 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
24730 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
24740 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
24750 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
24760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
24770 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
24780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
24790 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
247a0 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
247b0 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
247c0 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
247d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
247e0 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
247f0 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
24800 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
24810 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
24820 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
24830 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
24840 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
24850 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
24860 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
24870 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
24880 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
24890 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
248a0 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  if.u64 sqlite3Lo
248b0 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
248c0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
248d0 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
248e0 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
248f0 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
24900 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
24910 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
24920 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
24930 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
24940 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
24950 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
24960 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
24970 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
24980 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
24990 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
249a0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
249b0 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
249c0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
249d0 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
249e0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
249f0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
24a00 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
24a10 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
24a20 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
24a30 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
24a40 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
24a50 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
24a60 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
24a70 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
24a80 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
24a90 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
24aa0 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
24ab0 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
24ac0 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
24ad0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
24ae0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
24af0 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
24b00 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
24b10 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
24b20 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
24b30 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
24b40 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
24b50 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
24b60 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
24b70 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
24b80 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
24b90 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
24ba0 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
24bb0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
24bc0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
24bd0 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
24be0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
24bf0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
24c00 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
24c10 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  exAffinityStr(Vd
24c20 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  be *, Index *);.
24c30 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
24c40 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
24c50 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
24c60 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
24c70 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
24c80 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
24c90 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
24ca0 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
24cb0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
24cc0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
24cd0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
24ce0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
24cf0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
24d00 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
24d10 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
24d20 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
24d30 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
24d40 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
24d50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24d60 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
24d70 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
24d80 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
24d90 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
24da0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
24db0 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
24dc0 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
24dd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
24de0 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
24df0 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
24e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
24e10 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
24e20 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
24e30 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
24e40 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
24e50 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63  E_TEST) .const c
24e60 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
24e70 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
24e80 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
24e90 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
24ea0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
24eb0 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
24ec0 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
24ed0 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
24ee0 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
24ef0 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
24f00 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
24f10 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
24f20 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
24f30 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
24f40 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
24f50 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
24f60 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
24f70 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
24f80 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
24f90 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
24fa0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
24fb0 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
24fc0 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
24fd0 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
24fe0 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
24ff0 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
25000 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25010 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
25020 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
25030 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
25040 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
25050 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25060 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
25070 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
25080 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
25090 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
250a0 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
250b0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
250c0 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
250d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
250e0 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
250f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
25100 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
25110 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
25120 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
25130 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25140 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
25150 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
25160 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
25170 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
25180 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
25190 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
251a0 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
251b0 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
251c0 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
251d0 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
251e0 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
251f0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
25200 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
25210 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
25220 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
25230 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
25240 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
25250 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
25260 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20  id *,u8, .      
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
25290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
252a0 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
252b0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
252c0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
252d0 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
252e0 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
252f0 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
25300 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
25310 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
25320 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
25330 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
25340 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
25350 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
25360 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
25370 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
25380 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
25390 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
253a0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
253b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
253c0 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
253d0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
253e0 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
253f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
25400 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
25410 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
25420 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
25430 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
25440 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
25450 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25460 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
25470 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
25480 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
25490 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
254a0 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
254b0 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
254c0 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
254d0 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
254e0 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
254f0 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
25500 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
25510 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
25520 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
25530 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
25540 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
25550 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
25560 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
25570 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25580 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
25590 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
255a0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
255b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
255c0 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
255d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
255e0 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
255f0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
25600 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
25610 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
25620 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
25630 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
25640 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
25650 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
25660 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
25670 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
25680 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
25690 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
256a0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
256b0 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
256c0 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
256d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
256e0 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
256f0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
25700 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  eContext*);.int 
25710 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
25720 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
25730 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
25740 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25750 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
25760 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
25770 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
25780 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
25790 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
257a0 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
257b0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
257c0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
257d0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
257e0 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
257f0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
25800 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
25810 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
25820 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
25830 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
25840 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
25850 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
25860 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
25870 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
25880 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
25890 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
258a0 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
258b0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
258c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
258d0 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
258e0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
258f0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
25900 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
25910 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
25920 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
25930 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
25940 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
25950 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
25960 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25970 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
25980 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
25990 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
259a0 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
259b0 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
259c0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
259d0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
259e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
259f0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
25a00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
25a10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
25a20 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
25a30 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
25a40 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
25a50 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
25a60 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
25a70 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
25a80 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
25a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
25aa0 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
25ab0 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
25ac0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
25ad0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
25ae0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
25af0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
25b00 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65  lite3MinimumFile
25b10 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69  Format(Parse*, i
25b20 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25b30 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
25b40 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
25b50 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
25b60 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
25b70 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
25b80 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
25b90 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
25ba0 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
25bb0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
25bc0 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
25bd0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
25be0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
25bf0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
25c00 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
25c10 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
25c20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
25c30 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
25c40 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
25c50 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
25c60 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
25c70 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
25c80 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
25c90 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
25ca0 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
25cb0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
25cc0 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
25cd0 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64   void *, .  void
25ce0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
25cf0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
25d00 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
25d10 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25d20 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
25d30 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
25d40 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
25d50 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
25d60 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
25d70 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74  estructor.);.int
25d80 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
25d90 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
25da0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
25db0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
25dc0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
25dd0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
25de0 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68  it(StrAccum*, ch
25df0 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
25e00 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25e10 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
25e20 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
25e30 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25e40 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
25e50 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
25e60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
25e70 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
25e80 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
25e90 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
25ea0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
25eb0 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
25ec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
25ed0 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
25ee0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
25ef0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
25f00 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
25f10 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
25f20 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
25f30 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
25f40 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
25f50 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
25f60 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
25f70 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
25f80 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25f90 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
25fa0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
25fb0 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
25fc0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
25fd0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
25fe0 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
25ff0 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
26000 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
26010 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
26020 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
26030 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
26040 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
26050 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  8,int,int*);.int
26060 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
26070 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
26080 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
26090 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
260a0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
260b0 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
260c0 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
260d0 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
260e0 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
260f0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
26100 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
26110 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ue**);.#endif../
26120 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
26130 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
26140 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
26150 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
26160 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
26170 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69  d*(*)(u64));.voi
26180 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
26190 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
261a0 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
261b0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
261c0 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
261d0 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
261e0 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
261f0 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
26200 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
26210 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
26220 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
26230 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
26240 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
26250 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26260 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
26270 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
26280 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
26290 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
262a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
262b0 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
262c0 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
262d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
262e0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
262f0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
26300 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
26310 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
26320 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
26330 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26340 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
26350 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
26360 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
26370 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
26380 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
26390 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
263a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
263b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
263c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
263d0 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
263e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
263f0 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
26400 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
26410 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
26420 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
26430 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
26440 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
26450 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
26460 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
26470 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
26480 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20  k(X) .#  define 
26490 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
264a0 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
264b0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
264c0 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
264d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
264e0 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
264f0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
26500 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
26510 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
26520 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
26530 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
26540 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
26550 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
26560 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26570 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
26580 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
26590 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
265a0 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
265b0 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
265c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
265d0 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
265e0 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
265f0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
26600 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
26610 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26620 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
26630 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26640 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
26650 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
26660 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26670 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
26680 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
26690 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
266a0 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
266b0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
266c0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
266d0 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
266e0 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
266f0 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
26700 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
26710 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
26720 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
26730 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
26740 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
26750 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
26760 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26770 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
26780 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
26790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
267a0 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
267b0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
267c0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
267d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
267e0 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
267f0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
26800 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26810 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
26820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
26830 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
26840 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26850 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
26860 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
26870 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
26880 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
26890 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
268a0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
268b0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
268c0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
268d0 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
268e0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
268f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
26900 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
26910 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
26920 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
26930 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
26940 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
26950 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
26960 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26970 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
26980 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
26990 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
269a0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
269b0 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
269c0 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
269d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
269e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
269f0 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
26a00 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
26a10 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
26a20 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
26a30 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
26a40 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
26a50 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
26a60 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
26a70 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
26a80 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
26a90 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
26aa0 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
26ab0 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
26ac0 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
26ad0 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
26ae0 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
26af0 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
26b00 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
26b10 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
26b20 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
26b30 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
26b40 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
26b50 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
26b60 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
26b70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
26b80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
26b90 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
26ba0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
26bb0 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
26bc0 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
26bd0 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
26be0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
26bf0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
26c00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26c10 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
26c20 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
26c30 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
26c40 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
26c50 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26c60 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
26c70 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
26c80 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
26c90 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
26ca0 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
26cb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
26cc0 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
26cd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
26ce0 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
26cf0 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
26d00 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
26d10 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
26d20 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
26d30 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
26d40 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
26d50 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
26d60 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
26d70 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
26d80 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
26d90 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
26da0 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
26db0 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
26dc0 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
26dd0 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
26de0 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
26df0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
26e00 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
26e10 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
26e20 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
26e30 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
26e40 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
26e50 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
26e60 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
26e70 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
26e80 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
26e90 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
26ea0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
26eb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
26ec0 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
26ed0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26ee0 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
26ef0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
26f00 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26f10 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
26f20 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
26f30 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
26f40 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
26f50 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
26f60 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
26f70 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
26f80 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
26f90 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
26fa0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
26fb0 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
26fc0 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
26fd0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
26fe0 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
26ff0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
27000 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
27010 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
27020 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
27030 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
27040 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
27050 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27060 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
27070 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
27080 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
27090 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
270a0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
270b0 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
270c0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
270d0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
270e0 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
270f0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
27100 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
27110 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
27120 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
27130 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
27140 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
27150 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
27160 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
27170 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
27180 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27190 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
271a0 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
271b0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
271c0 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
271d0 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
271e0 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
271f0 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
27200 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
27210 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
27220 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
27230 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
27240 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
27250 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
27260 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
27270 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
27280 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
27290 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
272a0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
272b0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
272c0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
272d0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
272e0 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
272f0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
27300 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
27310 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
27320 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
27330 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
27340 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
27350 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
27360 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
27370 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
27380 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
27390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
273a0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
273b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
273c0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
273d0 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
273e0 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
273f0 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
27400 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
27410 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
27420 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
27430 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
27440 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
27450 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
27460 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
27470 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
27480 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
27490 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
274a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
274b0 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
274c0 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
274d0 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
274e0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
274f0 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
27500 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
27510 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
27520 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27530 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
27540 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
27550 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
27560 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
27570 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
27580 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
27590 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
275a0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
275b0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
275c0 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
275d0 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
275e0 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
275f0 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
27600 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
27610 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
27620 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
27630 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
27640 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
27650 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
27660 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
27670 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
27680 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
27690 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
276a0 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
276b0 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
276c0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
276d0 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
276e0 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
276f0 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
27700 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
27710 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
27720 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
27730 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
27740 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
27750 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
27760 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
27770 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
27780 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
27790 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
277a0 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
277b0 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
277c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
277d0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
277e0 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
277f0 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
27800 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
27810 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
27820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
27830 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
27840 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
27850 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
27860 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
27870 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
27880 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
27890 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49  le *);..#if SQLI
278a0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
278b0 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
278c0 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
278d0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
278e0 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
278f0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
27900 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
27910 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
27920 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
27930 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
27940 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27950 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
27960 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  t(x,y).  #define
27970 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
27980 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
27990 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
279a0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
279b0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
279c0 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
279d0 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
279e0 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
279f0 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
27a00 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27a10 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
27a20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
27a30 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
27a40 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
27a50 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
27a60 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
27a70 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
27a80 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
27a90 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
27aa0 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
27ab0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27ac0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27ad0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
27ae0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27af0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
27b00 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
27b10 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
27b20 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
27b30 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
27b40 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
27b50 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
27b60 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
27b70 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
27b80 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
27b90 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
27ba0 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
27bb0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
27bc0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27bd0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
27be0 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
27bf0 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
27c00 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
27c10 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
27c20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27c30 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
27c40 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
27c50 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
27c60 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
27c70 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
27c80 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
27c90 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
27ca0 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  ;.SQLITE_EXTERN 
27cb0 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f  void (*sqlite3Io
27cc0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
27cd0 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
27ce0 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
27cf0 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
27d00 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
27d10 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
27d20 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
27d30 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
27d40 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
27d50 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
27d60 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
27d70 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
27d80 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
27d90 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
27da0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
27db0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
27dc0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
27dd0 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
27de0 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
27df0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
27e00 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
27e10 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
27e20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
27e30 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
27e40 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
27e50 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
27e60 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
27e70 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
27e80 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
27e90 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
27ea0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
27eb0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
27ec0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
27ed0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
27ee0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
27ef0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
27f00 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
27f10 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
27f20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27f30 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
27f40 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
27f50 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
27f60 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
27f70 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
27f80 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
27f90 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
27fa0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
27fb0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
27fc0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
27fd0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
27fe0 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
27ff0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
28000 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
28010 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
28020 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
28030 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
28040 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
28050 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
28060 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
28070 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
28080 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
28090 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
280a0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
280b0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
280c0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
280d0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
280e0 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
280f0 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
28100 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
28110 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
28120 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
28130 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
28140 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
28150 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
28160 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
28170 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
28180 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
28190 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
281a0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
281b0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
281c0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
281d0 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
281e0 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
281f0 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
28200 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
28210 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
28220 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
28230 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
28240 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
28250 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
28260 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
28270 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
28280 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
28290 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
282a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
282b0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
282c0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
282d0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
282e0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
282f0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
28300 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
28310 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
28320 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
28330 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28340 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28350 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
28360 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
28370 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
28380 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
28390 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
283a0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
283b0 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
283c0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
283d0 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
283e0 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
283f0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
28400 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
28410 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
28420 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
28430 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
28440 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
28450 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
28460 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
28470 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
28480 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
28490 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
284a0 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
284b0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
284c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
284d0 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
284e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
284f0 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
28500 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
28510 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
28520 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
28530 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
28540 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
28550 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
28560 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
28570 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  if..#endif /* _S
28580 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.