/ Hex Artifact Content
Login

Artifact 66180aa8f81155a7f391bbf759ee5a3b61d2f89f:


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 20 20 75 38  rigger */.    u8
9960: 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20   imposterTable; 
9970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69            /* Bui
9980: 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65  lding an imposte
9990: 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69  r table */.  } i
99a0: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
99b0: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
99c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
99d0: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
99e0: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
99f0: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a10: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
9a20: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
9a30: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
9a40: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a60: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
9a70: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
9a80: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
9a90: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ab0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
9ac0: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
9ad0: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
9ae0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
9af0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9b00: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
9b10: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
9b20: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
9b30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9b40: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
9b50: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
9b60: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
9b70: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
9b80: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
9b90: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
9ba0: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
9bb0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9bd0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
9be0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
9bf0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
9c00: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
9c10: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
9c20: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
9c30: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9c40: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c60: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9c70: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
9c80: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
9c90: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
9ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9cb0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
9cc0: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
9cd0: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
9ce0: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
9cf0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
9d00: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9d10: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
9d20: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
9d30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9d40: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
9d50: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
9d60: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
9d70: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
9d80: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
9d90: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9da0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
9db0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
9dc0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
9dd0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
9de0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9df0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
9e00: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
9e10: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
9e20: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
9e30: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
9e40: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
9e50: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
9e60: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
9e70: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
9e80: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(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 63 68 61 72 2a 29 3b  ep,const char*);
9eb0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9ec0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
9ed0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
9ee0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
9ef0: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
9f00: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
9f10: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
9f20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
9f30: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
9f40: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
9f50: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
9f60: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
9f70: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
9f80: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
9f90: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
9fa0: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
9fb0: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
9fc0: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
9fd0: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
9fe0: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
9ff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
a000: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
a010: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
a020: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a030: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
a040: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
a050: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
a060: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
a070: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
a080: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
a090: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
a0a0: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
a0b0: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
a0c0: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
a0d0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
a0e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
a0f0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
a100: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
a110: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
a120: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
a130: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
a140: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
a150: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
a160: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
a170: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
a180: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
a190: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
a1a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a1b0: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
a1c0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
a1d0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
a1e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
a1f0: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
a200: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
a210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
a220: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
a230: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
a240: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
a250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
a260: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
a270: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
a280: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
a290: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
a2a0: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
a2b0: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
a2c0: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
a2d0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
a2e0: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
a2f0: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
a300: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
a310: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
a320: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
a330: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
a340: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
a350: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
a360: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
a370: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
a380: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
a390: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
a3a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
a3b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
a3c0: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
a3d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
a3e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
a3f0: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
a400: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
a410: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
a420: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
a430: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
a440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
a450: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
a460: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
a470: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
a480: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
a490: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
a4a0: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
a4b0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
a4c0: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
a4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
a4e0: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
a4f0: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
a500: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a520: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
a530: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
a540: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
a550: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
a560: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a570: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
a580: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
a590: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
a5a0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
a5b0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
a5c0: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
a5d0: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
a5e0: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
a5f0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
a600: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
a610: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
a620: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
a630: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
a640: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
a650: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
a660: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
a670: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
a680: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
a690: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
a6a0: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
a6b0: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
a6c0: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
a6d0: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
a6e0: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
a6f0: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
a700: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
a710: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
a720: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
a730: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
a740: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
a750: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
a760: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
a770: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
a780: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
a790: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
a7a0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
a7b0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
a7c0: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
a7d0: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
a7e0: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
a7f0: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
a800: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
a810: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
a820: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
a830: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
a840: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
a850: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
a860: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
a870: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
a880: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
a890: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
a8a0: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
a8b0: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
a8c0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
a8d0: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
a8e0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
a8f0: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a910: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
a920: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
a930: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
a940: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
a950: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
a960: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
a970: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
a980: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
a990: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
a9a0: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
a9b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
a9c0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
a9d0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
a9e0: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
a9f0: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
aa00: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
aa10: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
aa20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
aa30: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
aa40: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
aa50: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
aa60: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
aa70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
aa80: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
aa90: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
aaa0: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
aab0: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
aac0: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
aad0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
aae0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
aaf0: 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  flags..*/.#defin
ab00: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
ab10: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
ab20: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
ab30: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
ab40: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ab50: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
ab60: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
ab70: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
ab80: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
ab90: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
aba0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
abb0: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20      0x00000004  
abc0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
abd0: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
abe0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
abf0: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
ac00: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
ac10: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
ac20: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
ac30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ac40: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
ac50: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f  0x00000010  /* O
ac60: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
ac70: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
ac80: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
ac90: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
aca0: 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  20  /* Show full
acb0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
acc0: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
acd0: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
ace0: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
acf0: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
ad00: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
ad10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ad20: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
ad30: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
ad40: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
ad50: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
ad60: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
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 2f 2a 20 20              /*  
ad90: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
ada0: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
adb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
add0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
ade0: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
adf0: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
ae00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
ae10: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
ae20: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
ae30: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
ae40: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae70: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
ae80: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
ae90: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
aea0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
aeb0: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
aec0: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
aed0: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
aee0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aef0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
af00: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
af10: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
af20: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
af30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
af40: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
af50: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
af60: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
af70: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
af80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
af90: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
afa0: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
afb0: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
afc0: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
afd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
afe0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
aff0: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
b000: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
b010: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
b020: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b030: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
b040: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
b050: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
b060: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b070: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
b080: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
b090: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
b0a0: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
b0b0: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
b0c0: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
b0d0: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
b0e0: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
b0f0: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
b100: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
b110: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
b120: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
b130: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
b140: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b150: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
b160: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
b170: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
b180: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
b190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
b1a0: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
b1b0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
b1c0: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
b1d0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
b1e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
b1f0: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
b200: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
b210: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
b220: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
b230: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
b240: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
b250: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
b260: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
b270: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
b280: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
b290: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
b2a0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
b2b0: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
b2c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
b2d0: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30  eTrigger  0x0080
b2e0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
b2f0: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
b300: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b310: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
b320: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
b330: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
b340: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
b350: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
b360: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30  yOnly      0x020
b370: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
b380: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
b390: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b3a0: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
b3b0: 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20      0x04000000  
b3c0: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
b3d0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a   QUERY PLAN */..
b3e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
b3f0: 41 42 4c 45 5f 4f 54 41 0a 23 20 64 65 66 69 6e  ABLE_OTA.# defin
b400: 65 20 53 51 4c 49 54 45 5f 4f 74 61 4d 6f 64 65  e SQLITE_OtaMode
b410: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
b420: 30 20 20 2f 2a 20 54 72 75 65 20 69 6e 20 22 6f  0  /* True in "o
b430: 74 61 20 6d 6f 64 65 22 20 2a 2f 0a 23 65 6c 73  ta mode" */.#els
b440: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
b450: 45 5f 4f 74 61 4d 6f 64 65 20 20 20 20 20 20 20  E_OtaMode       
b460: 30 78 30 30 30 30 30 30 30 30 0a 23 65 6e 64 69  0x00000000.#endi
b470: 66 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  f../*.** Bits of
b480: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
b490: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
b4a0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
b4b0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
b4c0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
b4d0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
b4e0: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
b4f0: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
b500: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
b510: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
b520: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
b530: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
b540: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
b550: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
b560: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
b570: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
b580: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
b590: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
b5a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b5b0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
b5c0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
b5d0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
b5e0: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
b5f0: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
b600: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
b610: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
b620: 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20  toring */./*    
b630: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20              not 
b640: 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20  used    0x0010  
b650: 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f   // Was: SQLITE_
b660: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a  IdxRealAsInt */.
b670: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
b680: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
b690: 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0020   /* DISTIN
b6a0: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
b6b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b6c0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
b6d0: 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f    0x0040   /* Co
b6e0: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
b6f0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
b700: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
b710: 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20  oin 0x0080   /* 
b720: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
b730: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
b740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75  define SQLITE_Su
b750: 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30  bqCoroutine  0x0
b760: 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74  100   /* Evaluat
b770: 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20  e subqueries as 
b780: 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64  coroutines */.#d
b790: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
b7a0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32  nsitive     0x02
b7b0: 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  00   /* Transiti
b7c0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
b7d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b7e0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
b7f0: 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0400   /* Omit
b800: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
b810: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
b820: 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34  ne SQLITE_Stat34
b830: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20           0x0800 
b840: 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f    /* Use STAT3 o
b850: 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a  r STAT4 data */.
b860: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
b870: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
b880: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
b890: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
b8a0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
b8b0: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
b8c0: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
b8d0: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
b8e0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
b8f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
b900: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
b910: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
b920: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
b930: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
b940: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
b950: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
b960: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
b970: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
b980: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
b990: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
b9a0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
b9b0: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
b9c0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
b9d0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b9e0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
b9f0: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
ba00: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
ba10: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
ba20: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
ba30: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
ba40: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
ba50: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
ba60: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
ba70: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
ba80: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
ba90: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
baa0: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
bab0: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
bac0: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
bad0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
bae0: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
baf0: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
bb00: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
bb10: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
bb20: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
bb30: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
bb40: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
bb50: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
bb60: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
bb70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
bb80: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
bb90: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
bba0: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
bbb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
bbc0: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
bbd0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
bbe0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
bbf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bc00: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
bc10: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
bc20: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
bc30: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
bc40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
bc50: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
bc60: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
bc70: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
bc80: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
bc90: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
bca0: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
bcb0: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
bcc0: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
bcd0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
bce0: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
bcf0: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
bd00: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
bd10: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
bd20: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
bd30: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
bd40: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
bd50: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bd60: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
bd70: 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65  cture.  A pointe
bd80: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
bd90: 75 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ure is stored in
bda0: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e   the sqlite.aFun
bdb0: 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  c.** hash table.
bdc0: 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20    When multiple 
bdd0: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74  functions have t
bde0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68  he same name, th
bdf0: 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20  e hash table.** 
be00: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b  points to a link
be10: 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65  ed list of these
be20: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a   structures..*/.
be30: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
be40: 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20  .  i16 nArg;    
be50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
be60: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
be70: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
be80: 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e  ted */.  u16 fun
be90: 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  cFlags;       /*
bea0: 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f   Some combinatio
beb0: 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43  n of SQLITE_FUNC
bec0: 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  _* */.  void *pU
bed0: 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20  serData;     /* 
bee0: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
bef0: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
bf00: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
bf10: 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77   Next function w
bf20: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f  ith same name */
bf30: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
bf40: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
bf50: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
bf60: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c  lue**); /* Regul
bf70: 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ar function */. 
bf80: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
bf90: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
bfa0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
bfb0: 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61  e**); /* Aggrega
bfc0: 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  te step */.  voi
bfd0: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
bfe0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
bff0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c000: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69   /* Aggregate fi
c010: 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61  nalizer */.  cha
c020: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
c030: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
c040: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
c050: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61  /.  FuncDef *pHa
c060: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
c070: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
c080: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
c090: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75  ame hash */.  Fu
c0a0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
c0b0: 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20  estructor;   /* 
c0c0: 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  Reference counte
c0d0: 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  d destructor fun
c0e0: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
c0f0: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
c100: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
c110: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
c120: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
c130: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
c140: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
c150: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
c160: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
c170: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
c180: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
c190: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
c1a0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
c1b0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
c1c0: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
c1d0: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
c1e0: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
c1f0: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
c200: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
c210: 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d  t to .** the num
c220: 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f  ber of FuncDef o
c230: 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28  bjects created (
c240: 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64  either 1 or 3, d
c250: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
c260: 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68  her.** or not th
c270: 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f  e specified enco
c280: 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41  ding is SQLITE_A
c290: 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66  NY). The FuncDef
c2a0: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
c2b0: 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f  member of each o
c2c0: 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65  f the new FuncDe
c2d0: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74  f objects is set
c2e0: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
c2f0: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75   allocated.** Fu
c300: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a  ncDestructor..**
c310: 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20  .** Thereafter, 
c320: 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  when one of the 
c330: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
c340: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
c350: 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75  reference.** cou
c360: 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63  nt on this objec
c370: 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64  t is decremented
c380: 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65  . When it reache
c390: 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63  s 0, the destruc
c3a0: 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  tor.** is invoke
c3b0: 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65  d and the FuncDe
c3c0: 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75  structor structu
c3d0: 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72  re freed..*/.str
c3e0: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
c3f0: 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b  or {.  int nRef;
c400: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
c410: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76  oy)(void *);.  v
c420: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a  oid *pUserData;.
c430: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
c440: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
c450: 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f  ncDef.flags.  No
c460: 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e  te that the _LEN
c470: 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a  GTH and _TYPEOF.
c480: 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63  ** values must c
c490: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46  orrespond to OPF
c4a0: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
c4b0: 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
c4c0: 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  RG.  There.** ar
c4d0: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
c4e0: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
c4f0: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
c500: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c510: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
c520: 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54    0x003 /* SQLIT
c530: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
c540: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
c550: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
c560: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
c570: 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69    0x004 /* Candi
c580: 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b  date for the LIK
c590: 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  E optimization *
c5a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c5b0: 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30  _FUNC_CASE     0
c5c0: 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e  x008 /* Case-sen
c5d0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
c5e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
c5f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c600: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31 30 20  _EPHEM    0x010 
c610: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
c620: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
c630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c640: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
c650: 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33  0x020 /* sqlite3
c660: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
c670: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
c680: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c690: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
c6a0: 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d   0x040 /* Built-
c6b0: 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63  in length() func
c6c0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c6d0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
c6e0: 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75  OF   0x080 /* Bu
c6f0: 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20  ilt-in typeof() 
c700: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c710: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c720: 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f  COUNT    0x100 /
c730: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
c740: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
c750: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c760: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
c770: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
c780: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
c790: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
c7a0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
c7b0: 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20  LIKELY 0x400 /* 
c7c0: 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c  Built-in unlikel
c7d0: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
c7e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c7f0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38  UNC_CONSTANT 0x8
c800: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
c810: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
c820: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
c830: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c840: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30  UNC_MINMAX  0x10
c850: 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
c860: 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
c870: 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a  ggregates */../*
c880: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
c890: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
c8a0: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
c8b0: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
c8c0: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
c8d0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
c8e0: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
c8f0: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
c900: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
c910: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
c920: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c930: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
c940: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
c950: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
c960: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
c970: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
c980: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
c990: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
c9a0: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
c9b0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
c9c0: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
c9d0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
c9e0: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
c9f0: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
ca00: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
ca10: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
ca20: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
ca30: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
ca40: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
ca50: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
ca60: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
ca70: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
ca80: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
ca90: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
caa0: 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    VFUNCTION(zNam
cab0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
cac0: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
cad0: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
cae0: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
caf0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
cb00: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a  CONSTANT flag..*
cb10: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
cb20: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
cb30: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
cb40: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
cb50: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
cb60: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
cb70: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
cb80: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
cb90: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
cba0: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
cbb0: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
cbc0: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
cbd0: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
cbe0: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
cbf0: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
cc00: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
cc10: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
cc20: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
cc30: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
cc40: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
cc50: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
cc60: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
cc70: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
cc80: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
cc90: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
cca0: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
ccb0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
ccc0: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
ccd0: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
cce0: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
ccf0: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
cd00: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
cd10: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
cd20: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
cd30: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
cd40: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
cd50: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
cd60: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
cd70: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
cd80: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
cd90: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
cda0: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
cdb0: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
cdc0: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
cdd0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
cde0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
cdf0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ce00: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
ce10: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
ce20: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
ce30: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
ce40: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
ce50: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
ce60: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
ce70: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
ce80: 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
ce90: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
cea0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
ceb0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
cec0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
ced0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
cee0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
cef0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
cf00: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
cf10: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
cf20: 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a  fine FUNCTION2(z
cf30: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
cf40: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78  , bNC, xFunc, ex
cf50: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
cf60: 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f  Arg,SQLITE_FUNC_
cf70: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
cf80: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
cf90: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
cfa0: 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20  extraFlags,\.   
cfb0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
cfc0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
cfd0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
cfe0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53   0, 0}.#define S
cff0: 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  TR_FUNCTION(zNam
d000: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62  e, nArg, pArg, b
d010: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
d020: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d030: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d040: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
d050: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d060: 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
d070: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
d080: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d090: 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
d0a0: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
d0b0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
d0c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d0d0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d0e0: 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
d0f0: 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
d100: 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a  keFunc, 0, 0, #z
d110: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d120: 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
d130: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
d140: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
d150: 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  l) \.  {nArg, SQ
d160: 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
d170: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
d180: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
d190: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
d1a0: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
d1b0: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
d1c0: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
d1d0: 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  TE2(zName, nArg,
d1e0: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
d1f0: 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c   xFinal, extraFl
d200: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
d210: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
d220: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
d230: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
d240: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
d250: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
d260: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
d270: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f  l,#zName,0,0}../
d280: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
d290: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
d2a0: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
d2b0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
d2c0: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
d2d0: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
d2e0: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
d2f0: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
d300: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
d310: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
d320: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
d330: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
d340: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
d350: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
d360: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
d370: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
d380: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
d390: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d3a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
d3b0: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
d3c0: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
d3d0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
d3e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
d3f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d400: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
d410: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
d420: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
d430: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
d440: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
d450: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
d460: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
d470: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
d480: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
d490: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
d4a0: 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
d4b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
d4c0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
d4d0: 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
d4e0: 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
d4f0: 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
d500: 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
d510: 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
d520: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
d530: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
d540: 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
d550: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
d560: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
d570: 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
d580: 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
d590: 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
d5a0: 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
d5b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
d5c0: 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
d5d0: 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
d5e0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
d5f0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
d600: 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
d610: 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
d620: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
d630: 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
d640: 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
d650: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
d660: 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
d670: 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
d680: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
d690: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
d6a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
d6b0: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
d6c0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
d6d0: 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
d700: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
d710: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
d720: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
d730: 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
d740: 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
d750: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
d760: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
d770: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
d780: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
d790: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
d7a0: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
d7b0: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
d7c0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
d7d0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
d7e0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
d7f0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
d800: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
d810: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
d820: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
d830: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
d840: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
d850: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
d860: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
d870: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
d880: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
d890: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
d8a0: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
d8b0: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
d8c0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
d8d0: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
d8e0: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
d8f0: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
d900: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
d910: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
d920: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
d930: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
d940: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
d950: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
d960: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
d970: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
d980: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
d990: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
d9a0: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
d9b0: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
d9c0: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
d9d0: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
d9e0: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
d9f0: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
da00: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
da10: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
da20: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
da30: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
da40: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
da50: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
da60: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
da70: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
da80: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
da90: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
daa0: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
dab0: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
dac0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
dad0: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
dae0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
daf0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
db00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
db10: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
db20: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
db30: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
db40: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
db50: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
db60: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
db70: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
db80: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
db90: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
dba0: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
dbb0: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
dbc0: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
dbd0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
dbe0: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
dbf0: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
dc00: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
dc10: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
dc20: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
dc30: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
dc40: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
dc50: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
dc60: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
dc70: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
dc80: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
dc90: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
dca0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
dcb0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
dcc0: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
dcd0: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
dce0: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
dcf0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
dd00: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
dd10: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
dd20: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
dd30: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
dd40: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
dd50: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
dd60: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
dd70: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
dd80: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
dd90: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
dda0: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
ddb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ddc0: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
ddd0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
dde0: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
ddf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
de00: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
de10: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
de20: 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  g order */../*.*
de30: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
de40: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
de50: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
de60: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
de70: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
de80: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
de90: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
dea0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
deb0: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
dec0: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
ded0: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
dee0: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
def0: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
df00: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
df10: 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a  utively.  .**.**
df20: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
df30: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
df40: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
df50: 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79  h 'A'.  That way
df60: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
df70: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
df80: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
df90: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
dfa0: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
dfb0: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
dfc0: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
dfd0: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
dfe0: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
dff0: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
e000: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
e010: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
e020: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
e030: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
e040: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
e050: 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 4e  ison.  And the N
e060: 4f 4e 45 20 74 79 70 65 20 69 73 20 66 69 72 73  ONE type is firs
e070: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  t..*/.#define SQ
e080: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20  LITE_AFF_NONE   
e090: 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51    'A'.#define SQ
e0a0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
e0b0: 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51    'B'.#define SQ
e0c0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
e0d0: 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51    'C'.#define SQ
e0e0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e0f0: 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51    'D'.#define SQ
e100: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
e110: 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73    'E'..#define s
e120: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
e130: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
e140: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
e150: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
e160: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e170: 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
e180: 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
e190: 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
e1a0: 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20  affinity value. 
e1b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
e1c0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
e1d0: 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
e1e0: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
e1f0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
e200: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
e210: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
e220: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
e230: 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
e240: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
e250: 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
e260: 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
e270: 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
e280: 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
e290: 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
e2a0: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e2b0: 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
e2c0: 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
e2d0: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
e2e0: 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
e2f0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
e300: 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
e310: 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
e320: 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
e330: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
e340: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e350: 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
e360: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
e370: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
e380: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e390: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
e3a0: 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
e3b0: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
e3c0: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
e3d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e3e0: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
e3f0: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
e400: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
e410: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
e420: 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
e430: 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
e440: 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
e450: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
e460: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
e470: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
e480: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
e490: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
e4a0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
e4b0: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
e4c0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
e4d0: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
e4e0: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
e4f0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
e500: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
e510: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
e520: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
e530: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
e540: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
e550: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
e560: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
e570: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
e580: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
e590: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
e5a0: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
e5b0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
e5c0: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
e5d0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
e5e0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
e5f0: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
e600: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
e610: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
e620: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
e630: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
e640: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
e650: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
e660: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
e670: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
e680: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
e690: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
e6a0: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
e6b0: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
e6c0: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
e6d0: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
e6e0: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
e6f0: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
e700: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
e710: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
e720: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
e730: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
e740: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
e750: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
e760: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
e770: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
e780: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
e790: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
e7a0: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
e7b0: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
e7c0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
e7d0: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
e7e0: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
e7f0: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
e800: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
e810: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
e820: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
e830: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
e840: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
e850: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
e860: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
e870: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
e880: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
e890: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
e8a0: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
e8b0: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
e8c0: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
e8d0: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
e8e0: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
e8f0: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
e900: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
e910: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
e920: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
e930: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
e940: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
e950: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
e960: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
e970: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
e980: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
e990: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
e9a0: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
e9b0: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
e9c0: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
e9d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
e9e0: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
e9f0: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
ea00: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
ea10: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
ea20: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
ea30: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
ea40: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
ea50: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
ea60: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
ea70: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
ea80: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
ea90: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
eaa0: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
eab0: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
eac0: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
ead0: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
eae0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
eaf0: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
eb00: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
eb10: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
eb20: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
eb30: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
eb40: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
eb50: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
eb60: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
eb70: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
eb80: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
eb90: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
eba0: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
ebb0: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
ebc0: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
ebd0: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
ebe0: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
ebf0: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
ec00: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
ec10: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
ec20: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
ec30: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
ec40: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
ec50: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
ec60: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
ec70: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
ec80: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
ec90: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
eca0: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
ecb0: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
ecc0: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
ecd0: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
ece0: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
ecf0: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
ed00: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
ed10: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
ed20: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
ed30: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
ed40: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
ed50: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
ed60: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
ed70: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
ed80: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
ed90: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
eda0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
edb0: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
edc0: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
edd0: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
ede0: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
edf0: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
ee00: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
ee10: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
ee20: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
ee30: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
ee40: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
ee50: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
ee60: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
ee70: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
ee80: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
ee90: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
eea0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
eeb0: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
eec0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
eef0: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
ef00: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
ef10: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
ef20: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
ef30: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
ef40: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
ef50: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
ef60: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
ef70: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
ef80: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
ef90: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
efa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
efb0: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
efc0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
efd0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
efe0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70  SQL table is rep
eff0: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
f000: 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ry by an instanc
f010: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  e of the.** foll
f020: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
f030: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61  .**.** Table.zNa
f040: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
f050: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f the table.  Th
f060: 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72  e case of the or
f070: 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45  iginal.** CREATE
f080: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
f090: 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20   is stored, but 
f0a0: 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  case is not sign
f0b0: 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63  ificant for.** c
f0c0: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a  omparisons..**.*
f0d0: 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20  * Table.nCol is 
f0e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
f0f0: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
f100: 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c  ble.  Table.aCol
f110: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
f120: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
f130: 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65  Column structure
f140: 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  s, one for each 
f150: 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  column..**.** If
f160: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
f170: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
f180: 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c  Y KEY, then Tabl
f190: 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69  e.iPKey is the i
f1a0: 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63  ndex of.** the c
f1b0: 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68  olumn that is th
f1c0: 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77  at key.   Otherw
f1d0: 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  ise Table.iPKey 
f1e0: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
f1f0: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
f200: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
f210: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
f220: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
f230: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
f240: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
f250: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
f260: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
f270: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
f280: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
f290: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
f2a0: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
f2b0: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
f2c0: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
f2d0: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
f2e0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
f2f0: 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61  he table.  TF_Ha
f300: 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73  sPrimaryKey is s
f310: 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62  et if.** the tab
f320: 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41  le has any PRIMA
f330: 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20  RY KEY, INTEGER 
f340: 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a  or otherwise..**
f350: 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69  .** Table.tnum i
f360: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
f370: 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42  r for the root B
f380: 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65  Tree page of the
f390: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a   table in the.**
f3a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
f3b0: 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73   If Table.iDb is
f3c0: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
f3d0: 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
f3e0: 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73   backend.** in s
f3f0: 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20  qlite.aDb[].  0 
f400: 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20  is for the main 
f410: 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69  database and 1 i
f420: 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74  s for the file t
f430: 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d  hat.** holds tem
f440: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
f450: 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54  d indices.  If T
f460: 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73  F_Ephemeral is s
f470: 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74  et.** then the t
f480: 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69  able is stored i
f490: 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73  n a file that is
f4a0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
f4b0: 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74  eleted.** when t
f4c0: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74  he VDBE cursor t
f4d0: 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  o the table is c
f4e0: 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20  losed.  In this 
f4f0: 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20  case Table.tnum 
f500: 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20  .** refers VDBE 
f510: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68  cursor number th
f520: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62  at holds the tab
f530: 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20  le open, not to 
f540: 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  the root.** page
f550: 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69   number.  Transi
f560: 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75  ent tables are u
f570: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
f580: 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20  results of a.** 
f590: 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61  sub-query that a
f5a0: 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f  ppears instead o
f5b0: 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e  f a real table n
f5c0: 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ame in the FROM 
f5d0: 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20  clause .** of a 
f5e0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
f5f0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
f600: 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
f610: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
f620: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
f630: 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
f640: 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
f650: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
f660: 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
f670: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
f680: 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
f690: 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
f6a0: 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
f6b0: 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
f6c0: 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
f6d0: 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
f6e0: 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
f6f0: 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
f700: 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
f710: 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
f720: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
f730: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
f740: 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
f750: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
f760: 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
f770: 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
f780: 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
f790: 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  olumn */.#ifndef
f7a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45   SQLITE_OMIT_CHE
f7b0: 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  CK.  ExprList *p
f7c0: 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c  Check;    /* All
f7d0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
f7e0: 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c  ts */.#endif.  L
f7f0: 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
f800: 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
f810: 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
f820: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
f830: 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  t1 table */.  in
f840: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
f850: 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
f860: 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74   node for this t
f870: 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61  able (see note a
f880: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69  bove) */.  i16 i
f890: 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
f8a0: 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
f8b0: 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
f8c0: 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61  ey] as the prima
f8d0: 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20  ry key */.  i16 
f8e0: 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
f8f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
f900: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
f910: 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65  ble */.  u16 nRe
f920: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
f930: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
f940: 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
f950: 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
f960: 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
f970: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
f980: 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
f990: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
f9a0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
f9b0: 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
f9c0: 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
f9d0: 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
f9e0: 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
f9f0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
fa00: 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  if.  u8 tabFlags
fa10: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
fa20: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
fa30: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
fa40: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
fa50: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
fa60: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
fa70: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
fa80: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
fa90: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
faa0: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
fab0: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
fac0: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
fad0: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
fae0: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
faf0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
fb00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
fb10: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
fb20: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
fb30: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
fb40: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
fb50: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
fb60: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
fb70: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
fb80: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
fb90: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
fba0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
fbb0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
fbc0: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
fbd0: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
fbe0: 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
fbf0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
fc00: 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
fc10: 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
fc20: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
fc30: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
fc40: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
fc50: 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
fc60: 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
fc70: 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
fc80: 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
fc90: 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
fca0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
fcb0: 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
fcc0: 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags..*/.#define 
fcd0: 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20  TF_Readonly     
fce0: 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65     0x01    /* Re
fcf0: 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
fd00: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
fd10: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
fd20: 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e     0x02    /* An
fd30: 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
fd40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
fd50: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30  asPrimaryKey   0
fd60: 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  x04    /* Table 
fd70: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
fd80: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
fd90: 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
fda0: 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0x08    /* Integ
fdb0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
fdc0: 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
fdd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69  */.#define TF_Vi
fde0: 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78  rtual         0x
fdf0: 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69  10    /* Is a vi
fe00: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
fe10: 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
fe20: 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20  tRowid    0x20  
fe30: 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73    /* No rowid us
fe40: 65 64 2e 20 50 52 49 4d 41 52 59 20 4b 45 59 20  ed. PRIMARY KEY 
fe50: 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a  is the key */...
fe60: 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
fe70: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
fe80: 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
fe90: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
fea0: 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
feb0: 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
fec0: 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
fed0: 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
fee0: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
fef0: 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
ff00: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
ff10: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
ff20: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
ff30: 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
ff40: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
ff50: 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
ff60: 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29  gs & TF_Virtual)
ff70: 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
ff80: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
ff90: 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
ffa0: 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
ffb0: 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20  N)!=0).#else.#  
ffc0: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
ffd0: 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65  (X)      0.#  de
ffe0: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
fff0: 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
10000 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
10010 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
10020 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
10030 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
10040 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
10050 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
10060 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  )../*.** Each fo
10070 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
10080 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
10090 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
100a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
100b0 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
100c0 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
100d0 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
100e0 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
100f0 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
10100 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
10110 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
10120 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
10130 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
10140 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
10150 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
10160 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
10170 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
10180 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
10190 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
101a0 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
101b0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
101c0 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
101d0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
101e0 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
101f0 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
10200 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
10210 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
10220 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
10230 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
10240 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
10250 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
10260 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
10270 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74  "..** Equivalent
10280 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20   names:.**.**   
10290 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20    from-table == 
102a0 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20  child-table.**  
102b0 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d       to-table ==
102c0 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a   parent-table.**
102d0 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
102e0 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
102f0 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
10300 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10310 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
10320 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
10330 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
10340 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
10350 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
10360 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
10370 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
10380 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
10390 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
103a0 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
103b0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73  d..**.** The lis
103c0 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73  t of all parents
103d0 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65   for child Table
103e0 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e   X is held at X.
103f0 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c  pFKey..**.** A l
10400 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64  ist of all child
10410 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20  ren for a table 
10420 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d  named Z (which m
10430 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78  ight not even ex
10440 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20  ist).** is held 
10450 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61  in Schema.fkeyHa
10460 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b  sh with a hash k
10470 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75  ey of Z..*/.stru
10480 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
10490 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
104a0 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
104b0 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
104c0 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
104d0 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
104e0 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
104f0 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68  ext FKey with th
10500 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e  e same in pFrom.
10510 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20   Next parent of 
10520 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
10530 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
10540 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
10550 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
10560 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
10570 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
10580 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
10590 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t with the same 
105a0 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20  zTo. Next child 
105b0 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65  of zTo. */.  FKe
105c0 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
105d0 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20  * Previous with 
105e0 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a  the same zTo */.
105f0 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
10600 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10610 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
10620 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
10630 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
10640 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
10650 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
10660 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
10670 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
10680 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
10690 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
106a0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e  2];        /* ON
106b0 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55   DELETE and ON U
106c0 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72  PDATE actions, r
106d0 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20  espectively */. 
106e0 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67   Trigger *apTrig
106f0 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65  ger[2];/* Trigge
10700 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
10710 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
10720 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
10730 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f      /* Mapping o
10740 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
10750 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
10760 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
10770 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20  iFrom;          
10780 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
10790 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
107a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
107b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
107c0 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
107d0 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73  zTo.  If NULL us
107e0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  e PRIMARY KEY */
107f0 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20  .  } aCol[1];   
10800 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
10810 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
10820 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a  f nCol columns *
10830 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
10840 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
10850 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
10860 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
10870 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
10880 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
10890 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
108a0 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
108b0 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
108c0 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
108d0 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
108e0 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
108f0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
10900 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
10910 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
10920 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
10930 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
10940 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
10950 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
10960 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
10970 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
10980 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
10990 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
109a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
109b0 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
109c0 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
109d0 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
109e0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
109f0 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
10a00 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
10a10 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
10a20 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
10a30 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
10a40 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
10a50 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
10a60 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
10a70 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
10a80 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
10a90 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
10aa0 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
10ab0 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
10ac0 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
10ad0 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
10ae0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
10af0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
10b00 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
10b10 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
10b20 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
10b30 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
10b40 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
10b50 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
10b60 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
10b70 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
10b80 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
10b90 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
10ba0 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
10bb0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
10bc0 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
10bd0 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
10be0 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
10bf0 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
10c00 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
10c10 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
10c20 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
10c30 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
10c40 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
10c50 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
10c60 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
10c70 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
10c80 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
10c90 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
10ca0 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
10cb0 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
10cc0 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
10cd0 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
10ce0 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
10cf0 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
10d00 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
10d10 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
10d20 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
10d30 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
10d40 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
10d50 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
10d60 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
10d70 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
10d80 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
10d90 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
10da0 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
10db0 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
10dc0 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
10dd0 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
10de0 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
10df0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
10e00 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
10e10 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
10e20 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10e30 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
10e40 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
10e50 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
10e60 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
10e70 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
10e80 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
10e90 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
10ea0 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
10eb0 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
10ec0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
10ed0 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
10ee0 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
10ef0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
10f00 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
10f10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
10f20 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
10f30 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
10f40 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
10f50 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
10f60 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
10f70 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
10f80 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
10f90 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
10fa0 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
10fb0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
10fc0 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
10fd0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
10fe0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
10ff0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
11000 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
11010 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
11020 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
11030 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
11040 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
11050 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
11060 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
11070 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
11080 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
11090 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
110a0 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
110b0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
110c0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
110d0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
110e0 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
110f0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
11100 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
11110 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
11120 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
11130 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
11140 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
11150 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
11160 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
11170 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
11180 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
11190 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
111a0 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
111b0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
111c0 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
111d0 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
111e0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
111f0 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
11200 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
11210 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
11220 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11230 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
11240 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
11250 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
11260 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
11270 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
11280 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
11290 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
112a0 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
112b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
112c0 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
112d0 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
112e0 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64  */.  u16 nXField
112f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
11300 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65  er of columns be
11310 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c  yond the key col
11320 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  umns */.  sqlite
11330 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
11340 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
11350 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
11360 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
11370 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
11380 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
11390 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
113a0 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
113b0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
113c0 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
113d0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
113e0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
113f0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11400 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
11410 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
11420 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65  bout a.** single
11430 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68   index record th
11440 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  at has already b
11450 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
11460 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
11470 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
11480 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f  A record is an o
11490 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61  bject that conta
114a0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
114b0 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a  fields of data..
114c0 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75  ** Records are u
114d0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
114e0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
114f0 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73  ble row and to s
11500 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20  tore.** the key 
11510 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20  of an index.  A 
11520 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66  blob encoding of
11530 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65   a record is cre
11540 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f  ated by.** the O
11550 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  P_MakeRecord opc
11560 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20  ode of the VDBE 
11570 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62  and is disassemb
11580 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50  led by the.** OP
11590 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a  _Column opcode..
115a0 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
115b0 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63  ture holds a rec
115c0 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72  ord that has alr
115d0 65 61 64 79 20 62 65 65 6e 20 64 69 73 61 73 73  eady been disass
115e0 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69  embled.** into i
115f0 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66  ts constituent f
11600 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ields..**.** The
11610 20 72 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65   r1 and r2 membe
11620 72 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  r variables are 
11630 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 74 68 65  only used by the
11640 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61   optimized compa
11650 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f  rison.** functio
11660 6e 73 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d  ns vdbeRecordCom
11670 70 61 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64  pareInt() and vd
11680 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53  beRecordCompareS
11690 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75  tring()..*/.stru
116a0 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
116b0 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  d {.  KeyInfo *p
116c0 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c  KeyInfo;  /* Col
116d0 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d  lation and sort-
116e0 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  order informatio
116f0 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  n */.  u16 nFiel
11700 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
11710 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
11720 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
11730 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
11740 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
11750 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
11760 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
11770 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
11780 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
11790 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
117a0 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
117b0 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
117c0 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
117d0 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
117e0 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20  .  int r1;      
117f0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
11800 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68  to return if (lh
11810 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e  s > rhs) */.  in
11820 74 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  t r2;           
11830 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
11840 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c  turn if (rhs < l
11850 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a  hs) */.};.../*.*
11860 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
11870 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
11880 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
11890 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
118a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
118b0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
118c0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
118d0 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
118e0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
118f0 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
11900 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
11910 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
11920 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
11930 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
11940 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
11950 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
11960 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
11970 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
11980 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
11990 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
119a0 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
119b0 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
119c0 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
119d0 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
119e0 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
119f0 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
11a00 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
11a10 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
11a20 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
11a30 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
11a40 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
11a50 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
11a60 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
11a70 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
11a80 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
11a90 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
11aa0 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
11ab0 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
11ac0 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a  =2 because the .
11ad0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
11ae0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
11af0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
11b00 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
11b10 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
11b20 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
11b30 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
11b40 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
11b50 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
11b60 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
11b70 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
11b80 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
11b90 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
11ba0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
11bb0 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
11bc0 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
11bd0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
11be0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
11bf0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
11c00 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
11c10 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
11c20 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
11c30 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
11c40 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
11c50 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
11c60 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
11c70 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
11c80 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
11c90 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
11ca0 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69  ution .** algori
11cb0 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
11cc0 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
11cd0 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
11ce0 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
11cf0 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a  .** element..*/.
11d00 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
11d10 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11d20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
11d30 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
11d40 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
11d50 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
11d60 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
11d70 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
11d80 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
11d90 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
11da0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
11db0 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
11dc0 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
11dd0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
11de0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
11df0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
11e00 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
11e10 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
11e20 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
11e30 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
11e40 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
11e50 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
11e60 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
11e70 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
11e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
11e90 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
11ea0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
11eb0 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
11ec0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
11ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
11ee0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
11ef0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
11f00 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
11f10 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
11f20 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
11f30 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
11f40 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  C */.  char **az
11f50 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
11f60 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
11f70 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
11f80 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
11f90 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
11fa0 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
11fb0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
11fc0 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
11fd0 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11ff0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
12000 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
12010 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
12020 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
12030 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
12040 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
12050 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
12060 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
12070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12080 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12090 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
120a0 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
120b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
120c0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
120d0 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
120e0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
120f0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
12100 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
12110 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
12120 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
12130 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
12140 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
12150 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
12160 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
12170 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
12180 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
12190 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
121a0 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
121b0 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
121c0 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
121d0 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
121e0 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
121f0 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
12200 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
12210 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
12220 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
12230 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
12240 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
12250 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
12260 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
12270 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
12280 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
12290 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
122a0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67  index */.  unsig
122b0 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31  ned noSkipScan:1
122c0 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72  ;   /* Do not tr
122d0 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63  y to use skip-sc
122e0 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69  an if true */.#i
122f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
12300 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
12310 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12330 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
12340 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
12350 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
12360 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
12370 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
12380 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
12390 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
123a0 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
123b0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
123c0 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
123d0 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
123e0 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
123f0 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
12400 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
12410 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
12420 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
12430 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
12440 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
12450 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
12460 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
12470 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
12480 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
12490 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
124a0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
124b0 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
124c0 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
124d0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
124e0 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
124f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
12500 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
12510 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
12520 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
12530 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
12540 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
12550 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
12560 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
12570 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
12580 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12590 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
125a0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
125b0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
125c0 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
125d0 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
125e0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
125f0 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
12600 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
12610 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
12620 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
12630 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
12640 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
12650 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
12660 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
12670 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
12680 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
12690 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
126a0 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
126b0 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  one)../*.** Each
126c0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
126d0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
126e0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
126f0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
12700 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  y .** using a st
12710 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
12720 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
12730 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
12740 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
12750 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
12760 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
12770 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
12780 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
12790 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
127a0 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
127b0 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
127c0 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
127d0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
127e0 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
127f0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
12800 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
12810 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
12820 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
12830 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
12840 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
12850 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
12860 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
12870 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
12880 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
12890 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
128a0 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
128b0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
128c0 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
128d0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
128e0 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
128f0 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
12900 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
12910 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
12920 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
12930 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
12940 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
12950 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
12960 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
12970 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
12980 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
12990 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
129a0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
129b0 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
129c0 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
129d0 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
129e0 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
129f0 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
12a00 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
12a10 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
12a20 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
12a30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
12a40 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
12a50 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
12a60 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
12a70 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
12a80 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
12a90 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
12aa0 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
12ab0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
12ac0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
12ad0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
12ae0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
12af0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
12b00 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
12b10 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
12b20 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
12b30 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
12b40 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
12b50 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
12b60 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
12b70 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
12b80 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
12b90 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
12ba0 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
12bb0 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
12bc0 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
12bd0 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
12be0 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
12bf0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
12c00 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
12c10 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
12c20 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
12c30 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
12c40 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
12c50 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
12c60 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
12c70 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
12c80 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
12c90 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
12ca0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
12cb0 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
12cc0 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
12cd0 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
12ce0 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
12cf0 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
12d00 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
12d10 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
12d20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
12d30 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
12d40 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
12d50 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
12d60 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
12d90 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
12da0 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
12db0 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
12dc0 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
12dd0 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
12de0 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
12df0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12e00 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
12e30 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
12e40 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
12e50 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
12e60 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
12e70 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
12e80 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
12e90 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
12ea0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
12eb0 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
12ec0 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
12ed0 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
12ee0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
12ef0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12f00 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  ex */.  int mnRe
12f10 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20  g, mxReg;       
12f20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69  /* Range of regi
12f30 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
12f40 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75  for aCol and aFu
12f50 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  nc */.  ExprList
12f60 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
12f70 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
12f80 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
12f90 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
12fa0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
12fb0 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
12fc0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
12fd0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ff0 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
13000 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13020 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
13030 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
13040 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
13050 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13060 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
13070 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
13080 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
13090 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
130a0 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
130b0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
130c0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
130d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
130e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
130f0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
13100 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
13110 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
13120 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13140 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
13150 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
13160 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
13170 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
13180 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
13190 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
131a0 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
131b0 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
131c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
131d0 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
131e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
131f0 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
13220 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
13230 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
13240 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
13270 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
13280 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
13290 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
132a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
132b0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
132c0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
132d0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
132e0 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
132f0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
13300 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
13310 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
13320 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13330 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
13340 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
13370 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
13380 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
13390 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
133a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
133b0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
133c0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
133d0 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
133e0 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
133f0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
13400 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
13410 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
13420 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
13430 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
13440 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
13450 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
13460 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
13470 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
13480 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
13490 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
134a0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
134b0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
134c0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
134d0 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
134e0 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
134f0 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
13500 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
13510 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
13520 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
13530 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
13540 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
13550 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
13560 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13570 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
13580 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
13590 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
135a0 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
135b0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
135c0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
135d0 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
135e0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
135f0 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
13600 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
13610 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
13620 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
13630 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
13640 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
13650 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
13660 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
13670 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
13680 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
13690 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
136a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
136b0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
136c0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
136d0 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
136e0 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
136f0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
13700 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
13710 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
13720 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
13730 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
13740 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
13750 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
13760 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
13770 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
13780 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
13790 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
137a0 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
137b0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
137c0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
137d0 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
137e0 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
137f0 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
13800 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
13810 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
13820 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
13830 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13840 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
13850 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
13860 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
13870 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
13880 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
13890 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
138a0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
138b0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
138c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
138d0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
138e0 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
138f0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
13900 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
13910 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
13920 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
13930 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
13940 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
13950 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
13960 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
13970 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
13980 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
13990 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
139a0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
139b0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
139c0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
139d0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
139e0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
139f0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
13a00 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
13a10 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
13a20 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
13a30 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
13a40 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
13a50 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
13a60 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
13a70 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
13a80 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
13a90 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
13aa0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
13ab0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
13ac0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
13ad0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
13ae0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
13af0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
13b00 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
13b10 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
13b20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
13b30 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
13b40 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
13b50 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
13b60 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
13b70 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
13b80 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
13b90 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
13ba0 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
13bb0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
13bc0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
13bd0 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
13be0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
13bf0 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
13c00 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
13c10 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
13c20 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
13c30 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
13c40 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
13c50 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
13c60 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
13c70 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
13c80 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
13c90 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
13ca0 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
13cb0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
13cc0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
13cd0 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
13ce0 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
13cf0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
13d00 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
13d10 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
13d20 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
13d30 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
13d40 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
13d50 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
13d60 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
13d70 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
13d80 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
13d90 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
13da0 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
13db0 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
13dc0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
13dd0 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
13de0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
13df0 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
13e00 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
13e10 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
13e20 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
13e30 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
13e40 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13e50 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
13e60 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
13e70 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
13e80 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
13e90 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
13ea0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
13eb0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
13ec0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
13ed0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
13ee0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
13ef0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
13f00 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
13f10 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
13f20 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
13f30 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
13f40 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
13f50 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
13f60 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
13f70 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
13f80 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
13f90 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
13fa0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
13fb0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
13fc0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
13fd0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
13fe0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
13ff0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
14000 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
14010 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
14020 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
14030 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
14040 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
14050 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
14060 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
14070 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
14080 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
14090 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
140a0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
140b0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
140c0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
140d0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
140e0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
140f0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
14100 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
14110 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
14120 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
14130 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
14140 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
14150 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
14160 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
14170 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
14180 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
14190 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
141a0 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
141b0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
141c0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
141d0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
141e0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
141f0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
14200 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
14210 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
14220 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
14230 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
14240 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
14250 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
14260 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
14270 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
14280 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
14290 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
142a0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
142b0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
142c0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
142d0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
142e0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
142f0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
14300 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
14310 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
14320 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
14330 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
14340 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
14350 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
14380 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
14390 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
143a0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
143b0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
143c0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
143d0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
143e0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
143f0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
14400 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
14410 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
14420 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
14430 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
14440 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
14450 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
14460 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
14470 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
14480 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
14490 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
144a0 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
144b0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
144c0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
144d0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
144e0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
144f0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
14500 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
14510 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
14520 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
14530 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
14540 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
14550 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
14560 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
14570 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
14580 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
14590 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
145a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
145d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
145e0 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
145f0 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
14600 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
14610 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
14620 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
14630 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
14640 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
14650 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
14660 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
14670 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
14680 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
14690 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
146a0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
146b0 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
146c0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
146d0 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
146e0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
146f0 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
14700 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
14710 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
14720 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
14730 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
14740 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
14750 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
14760 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
14770 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
14780 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
14790 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
147a0 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
147b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
147e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
147f0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
14800 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
14810 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
14820 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
14830 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
14840 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
14850 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
14860 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
14870 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
14880 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
14890 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
148a0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
148c0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
148d0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
14900 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
14910 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
14940 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
14950 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a  mes likelihood *
14960 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
14970 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
14980 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
14990 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
149a0 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
149c0 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
149d0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
149e0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
149f0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
14a00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
14a10 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
14a20 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
14a30 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
14a40 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
14a50 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
14a60 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
14a70 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
14a80 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
14a90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14aa0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
14ab0 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
14ac0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
14af0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
14b00 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
14b30 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
14b40 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
14b50 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
14b60 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
14b70 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
14b80 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
14b90 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
14ba0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
14bb0 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
14bc0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
14bd0 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
14be0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
14bf0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
14c00 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
14c10 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
14c20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
14c30 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
14c40 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20  1 /* Originates 
14c50 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75  in ON/USING clau
14c60 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e  se of outer join
14c70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
14c80 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
14c90 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
14ca0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
14cb0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
14cc0 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
14cd0 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
14ce0 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
14cf0 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
14d00 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
14d10 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
14d20 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
14d30 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
14d40 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
14d50 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
14d60 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
14d70 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
14d80 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
14d90 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
14da0 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
14db0 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
14dc0 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
14dd0 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
14de0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
14df0 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
14e00 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
14e10 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
14e20 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
14e30 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
14e40 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
14e50 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
14e60 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
14e70 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
14e80 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
14e90 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
14ea0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
14eb0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
14ec0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
14ed0 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
14ee0 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
14ef0 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
14f00 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
14f10 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
14f20 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
14f30 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
14f40 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
14f50 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
14f60 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
14f70 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
14f80 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
14f90 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
14fa0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
14fb0 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
14fc0 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
14fd0 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
14fe0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
14ff0 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
15000 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
15010 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
15020 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
15030 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
15040 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
15050 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
15060 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
15070 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
15080 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
15090 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
150a0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
150b0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
150c0 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
150d0 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
150e0 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
150f0 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
15100 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
15110 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
15120 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
15130 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
15140 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
15150 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
15160 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
15170 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
15180 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
15190 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
151a0 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e  efine EP_Constan
151b0 74 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e  t  0x080000 /* N
151c0 6f 64 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e  ode is a constan
151d0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
151e0 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
151f0 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
15200 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
15210 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
15220 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
15230 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
15240 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
15250 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
15260 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61  the .** Expr.fla
15270 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
15280 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
15290 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
152a0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
152b0 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
152c0 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
152d0 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
152e0 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
152f0 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
15300 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
15310 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
15320 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
15330 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
15340 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
15350 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
15360 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
15370 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
15380 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
15390 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
153a0 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
153b0 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
153c0 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
153d0 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
153e0 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
153f0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
15400 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
15410 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
15420 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
15430 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
15440 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
15450 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
15460 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
15470 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
15480 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
15490 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
154a0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
154b0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
154c0 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74  rmal Expr .** st
154d0 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
154e0 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
154f0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
15500 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20  t in Expr.flags 
15510 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
15520 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
15530 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
15540 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
15550 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
15560 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
15570 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
15580 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
15590 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
155a0 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
155b0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
155c0 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
155d0 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
155e0 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
155f0 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
15600 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
15610 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
15620 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
15630 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
15640 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
15650 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
15660 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
15670 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65  omment .** above
15680 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
15690 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
156a0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
156b0 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
156c0 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
156d0 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
156e0 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
156f0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
15700 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
15710 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
15720 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
15730 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
15740 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
15750 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
15760 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
15770 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
15780 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
15790 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
157a0 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
157b0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
157c0 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
157d0 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
157e0 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
157f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
15800 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
15810 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
15820 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
15830 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
15840 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
15850 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
15860 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
15870 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
15880 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
15890 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
158a0 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
158b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
158c0 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
158d0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
158e0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
158f0 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
15900 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
15910 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
15920 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
15930 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
15940 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
15950 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
15960 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15970 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
15980 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
15990 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
159a0 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
159b0 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
159c0 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
159d0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
159e0 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
159f0 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
15a00 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
15a10 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
15a20 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
15a30 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
15a40 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
15a50 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
15a60 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15a80 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
15a90 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
15aa0 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
15ab0 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
15ac0 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
15ad0 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
15ae0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
15af0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
15b00 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  /* The list of e
15b10 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
15b20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
15b30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
15b40 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
15b50 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
15b60 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
15b70 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
15b80 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
15b90 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
15ba0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
15bb0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
15bc0 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53      /* 1 for DES
15bd0 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a  C or 0 for ASC *
15be0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  /.    unsigned d
15bf0 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a  one :1;       /*
15c00 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
15c10 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
15c20 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
15c30 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
15c40 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f  bSpanIsTab :1; /
15c50 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42  * zSpan holds DB
15c60 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f  .TABLE.COLUMN */
15c70 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
15c80 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20  usable :1;   /* 
15c90 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
15ca0 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20  ion is reusable 
15cb0 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
15cc0 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
15cd0 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
15ce0 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
15cf0 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
15d00 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
15d10 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
15d20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
15d30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
15d40 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
15d50 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
15d60 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
15d70 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
15d80 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
15d90 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
15da0 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
15db0 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
15dc0 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20  u;.  } *a;      
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
15de0 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20  lloc a power of 
15df0 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65  two greater or e
15e00 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f  qual to nExpr */
15e10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
15e20 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
15e30 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
15e40 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74   by the parser t
15e50 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a  o record both.**
15e60 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
15e70 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f  for an expressio
15e80 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f  n and the span o
15e90 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72  f input text for
15ea0 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   an.** expressio
15eb0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  n..*/.struct Exp
15ec0 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a  rSpan {.  Expr *
15ed0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
15ee0 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  /* The expressio
15ef0 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a  n parse tree */.
15f00 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
15f10 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74  tart;   /* First
15f20 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e   character of in
15f30 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f  put text */.  co
15f40 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20  nst char *zEnd; 
15f50 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61      /* One chara
15f60 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e  cter past the en
15f70 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  d of input text 
15f80 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
15f90 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
15fa0 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
15fb0 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
15fc0 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
15fd0 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
15fe0 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
15ff0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
16000 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
16010 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
16020 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
16030 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
16040 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
16050 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
16060 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
16070 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
16080 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
16090 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
160a0 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
160b0 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
160c0 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
160d0 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
160e0 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
160f0 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
16100 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
16110 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
16120 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
16130 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
16140 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
16150 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
16160 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
16170 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
16180 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
16190 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
161a0 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
161b0 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
161c0 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
161d0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
161e0 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
161f0 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
16200 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
16210 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
16220 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
16230 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
16240 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
16250 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
16260 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
16270 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
16280 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
16290 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20  .** The bitmask 
162a0 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64  datatype defined
162b0 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66   below is used f
162c0 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  or various optim
162d0 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  izations..**.** 
162e0 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72  Changing this fr
162f0 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61  om a 64-bit to a
16300 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d   32-bit type lim
16310 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  its the number o
16320 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61  f.** tables in a
16330 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74   join to 32 inst
16340 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20  ead of 64.  But 
16350 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20  it also reduces 
16360 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74  the size.** of t
16370 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33  he library by 73
16380 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e  8 bytes on ix86.
16390 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20  .*/.typedef u64 
163a0 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20  Bitmask;../*.** 
163b0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
163c0 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
163d0 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
163e0 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
163f0 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
16400 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
16410 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
16420 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
16430 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
16440 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
16450 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
16460 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
16470 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
16480 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a  int)1)<<(n))../*
16490 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
164a0 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
164b0 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
164c0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
164d0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
164e0 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
164f0 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
16500 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
16510 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
16520 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
16530 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
16540 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
16550 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
16560 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
16570 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
16580 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
16590 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
165a0 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
165b0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
165c0 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
165d0 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
165e0 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
165f0 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
16600 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
16610 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
16620 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
16630 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
16640 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
16650 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
16660 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
16670 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
16680 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
16690 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
166a0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
166b0 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
166c0 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
166d0 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
166e0 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
166f0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
16700 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
16710 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
16720 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
16730 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
16740 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
16750 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
16760 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
16770 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
16780 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
16790 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
167a0 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
167b0 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
167c0 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
167d0 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
167e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
167f0 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
16800 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
16810 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
16820 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
16830 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
16840 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
16850 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
16860 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
16870 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
16880 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
16890 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
168a0 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
168b0 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
168c0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
168d0 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
168e0 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
168f0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
16900 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
16910 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
16920 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
16930 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
16940 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
16950 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
16960 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
16970 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
16980 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
16990 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
169a0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
169b0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
169c0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
169d0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
169e0 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
169f0 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
16a00 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
16a10 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
16a20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
16a30 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
16a40 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
16a50 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
16a60 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
16a70 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
16a80 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
16a90 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
16aa0 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
16ab0 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
16ac0 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
16ad0 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
16ae0 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
16af0 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
16b00 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
16b10 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
16b20 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
16b30 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
16b40 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
16b50 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
16b60 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
16b70 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
16b80 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
16b90 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  e */.    u8 join
16ba0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
16bb0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
16bc0 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
16bd0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
16be0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
16bf0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
16c00 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
16c10 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
16c20 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
16c30 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
16c40 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
16c50 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
16c60 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
16c70 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
16c80 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
16c90 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
16ca0 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
16cb0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
16cc0 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
16cd0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
16ce0 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
16cf0 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e   in WITH */.#ifn
16d00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16d10 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
16d20 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
16d30 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
16d40 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
16d50 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
16d60 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
16d70 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
16d80 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
16d90 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
16da0 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
16db0 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
16dc0 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
16dd0 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
16de0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
16df0 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
16e00 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
16e10 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
16e20 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
16e30 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
16e40 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
16e50 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
16e60 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63  is used */.    c
16e70 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20  har *zIndex;    
16e80 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
16e90 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
16ea0 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
16eb0 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
16ec0 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64  Index;    /* Ind
16ed0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
16ee0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49  responding to zI
16ef0 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  ndex, if any */.
16f00 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
16f10 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
16f20 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
16f30 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
16f40 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
16f50 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
16f60 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
16f70 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
16f80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
16f90 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
16fa0 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
16fb0 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
16fc0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
16fd0 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
16fe0 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
16ff0 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
17000 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
17010 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
17020 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
17030 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
17040 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
17050 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
17060 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
17070 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
17080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
17090 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
170a0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
170b0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
170c0 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
170d0 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
170e0 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
170f0 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
17100 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
17110 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
17120 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
17130 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
17140 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
17150 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
17160 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
17170 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
17180 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
17190 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
171a0 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
171b0 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65  s member..*/.#de
171c0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
171d0 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
171e0 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
171f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
17200 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
17210 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
17220 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
17230 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
17240 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
17250 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
17260 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
17270 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17280 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
17290 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
172a0 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
172b0 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
172c0 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
172d0 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
172e0 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
172f0 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38  TES_OK    0x0008
17300 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
17310 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
17320 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
17330 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e   WHERE_OMIT_OPEN
17340 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f  _CLOSE  0x0010 /
17350 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20  * Table cursors 
17360 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e  are already open
17370 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17380 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20  E_FORCE_TABLE   
17390 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20     0x0020 /* Do 
173a0 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78  not use an index
173b0 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a  -only search */.
173c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
173d0 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30  ETABLE_ONLY    0
173e0 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f  x0040 /* Only co
173f0 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65  de the 1st table
17400 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a   in pTabList */.
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 30            /*   0
17430 78 30 30 38 30 20 2f 2f 20 6e 6f 74 20 63 75 72  x0080 // not cur
17440 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23  rently used */.#
17450 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
17460 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
17470 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0100 /* pOrderBy
17480 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
17490 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
174a0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
174b0 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  Y       0x0200 /
174c0 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
174d0 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
174e0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
174f0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
17500 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20  TINCT    0x0400 
17510 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
17520 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
17530 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ct */.#define WH
17540 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20  ERE_SORTBYGROUP 
17550 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53       0x0800 /* S
17560 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68  upport sqlite3Wh
17570 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f  ereIsSorted() */
17580 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52  .#define WHERE_R
17590 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20  EOPEN_IDX       
175a0 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f  0x1000 /* Try to
175b0 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64   use OP_ReopenId
175c0 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  x */../* Allowed
175d0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
175e0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
175f0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
17600 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17610 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
17620 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
17630 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
17640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17650 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
17660 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
17670 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
17680 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17690 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
176a0 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
176b0 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
176c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
176d0 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
176e0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
176f0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
17700 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
17710 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
17720 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
17730 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
17740 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
17750 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
17760 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
17770 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
17780 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
17790 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
177a0 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
177b0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
177c0 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
177d0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
177e0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
177f0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
17800 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
17810 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
17820 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
17830 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
17840 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
17850 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
17860 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
17870 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
17880 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
17890 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
178a0 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
178b0 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
178c0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
178d0 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
178e0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
178f0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
17900 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
17910 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
17920 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
17930 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
17940 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
17950 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
17960 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
17970 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
17980 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
17990 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
179a0 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
179b0 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
179c0 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
179d0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
179e0 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
179f0 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
17a00 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
17a10 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
17a20 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
17a30 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
17a40 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
17a50 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
17a60 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
17a70 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
17a80 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
17a90 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
17aa0 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
17ab0 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
17ac0 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
17ad0 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
17ae0 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
17af0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
17b00 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
17b10 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
17b20 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
17b30 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
17b40 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
17b50 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
17b60 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
17b70 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
17b80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
17b90 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
17ba0 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
17bb0 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
17bc0 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
17bd0 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
17be0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
17bf0 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
17c00 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
17c10 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
17c20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
17c30 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
17c40 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
17c50 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
17c60 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
17c70 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
17c80 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
17c90 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
17ca0 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
17cb0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
17cc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17cd0 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
17ce0 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
17cf0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
17d00 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
17d10 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
17d20 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
17d30 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
17d40 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46  mes */.  u16 ncF
17d50 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
17d60 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
17d70 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
17d80 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
17d90 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
17da0 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
17db0 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
17dc0 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  field..**.** Not
17dd0 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  e:  NC_MinMaxAgg
17de0 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73   must have the s
17df0 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f  ame value as SF_
17e00 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a  MinMaxAgg and.**
17e10 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
17e20 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66  MAX..** .*/.#def
17e30 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
17e40 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
17e50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17e60 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
17e70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
17e80 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20  asAgg    0x0002 
17e90 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
17ea0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17eb0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
17ec0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
17ed0 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
17ee0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
17ef0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
17f00 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
17f10 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
17f20 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
17f30 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
17f40 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
17f50 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
17f60 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
17f70 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20  0x0010  /* True 
17f80 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
17f90 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
17fa0 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
17fb0 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
17fc0 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
17fd0 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
17fe0 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
17ff0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
18000 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
18010 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
18020 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
18030 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
18040 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
18050 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
18060 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18070 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
18080 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
18090 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
180a0 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
180b0 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
180c0 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
180d0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
180e0 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
180f0 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
18100 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
18110 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
18120 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
18130 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
18140 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
18150 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
18160 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
18170 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
18180 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
18190 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
181a0 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
181b0 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
181c0 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
181d0 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
181e0 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
181f0 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
18200 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
18210 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
18220 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
18230 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
18240 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
18250 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
18260 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
18270 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
18280 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
18290 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
182a0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
182b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
182c0 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
182d0 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
182e0 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
182f0 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
18300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
18310 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
18320 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
18330 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
18340 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
18350 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
18360 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
18370 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
18380 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
18390 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
183a0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
183b0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
183c0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
183d0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
183e0 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
183f0 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
18400 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
18410 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
18420 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
18430 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
18440 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
18450 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
18460 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
18470 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
18480 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
18490 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
184a0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
184b0 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36  _EXCEPT */.  u16
184c0 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
184d0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
184e0 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
184f0 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
18500 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
18510 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
18520 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
18530 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
18540 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
18550 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
18560 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
18570 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
18580 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
18590 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
185a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
185b0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
185c0 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
185d0 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
185e0 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
185f0 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c  ct */.  u64 nSel
18600 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f  ectRow;        /
18610 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
18620 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
18630 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
18640 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
18650 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
18660 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
18670 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
18680 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
18690 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
186a0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
186b0 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
186c0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
186d0 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
186e0 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
186f0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
18700 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
18710 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
18720 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
18730 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
18740 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
18750 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
18760 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
18770 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
18780 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
18790 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
187a0 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
187b0 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
187c0 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
187d0 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
187e0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
187f0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
18800 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
18810 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
18820 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
18830 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
18840 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
18850 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
18860 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
18870 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
18880 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
18890 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
188a0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
188b0 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
188c0 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
188d0 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
188e0 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
188f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
18900 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
18910 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
18920 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
18930 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
18940 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
18950 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
18960 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
18970 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
18980 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
18990 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
189a0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
189b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
189c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
189d0 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
189e0 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
189f0 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
18a00 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
18a10 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
18a20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
18a30 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
18a40 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
18a50 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
18a60 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
18a70 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
18a80 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
18a90 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
18aa0 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
18ab0 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
18ac0 20 20 30 78 30 30 34 30 20 20 2f 2a 20 50 61 72    0x0040  /* Par
18ad0 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
18ae0 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  query */.#define
18af0 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
18b00 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53      0x0080  /* S
18b10 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
18b20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
18b30 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 56  .#define SF_AllV
18b40 61 6c 75 65 73 20 20 20 20 20 20 20 30 78 30 31  alues       0x01
18b50 30 30 20 20 2f 2a 20 41 6c 6c 20 74 65 72 6d 73  00  /* All terms
18b60 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 20 61 72 65   of compound are
18b70 20 56 41 4c 55 45 53 20 2a 2f 0a 23 64 65 66 69   VALUES */.#defi
18b80 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
18b90 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a        0x0200  /*
18ba0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
18bb0 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
18bc0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
18bd0 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
18be0 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65     0x0400  /* Ne
18bf0 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
18c00 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
18c10 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
18c20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20  SF_Recursive    
18c30 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68     0x0800  /* Th
18c40 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74  e recursive part
18c50 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20   of a recursive 
18c60 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTE */.#define S
18c70 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
18c80 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67 67    0x1000  /* Agg
18c90 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
18ca0 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
18cb0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
18cc0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
18cd0 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
18ce0 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
18cf0 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
18d00 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
18d10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
18d20 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
18d30 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
18d40 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
18d50 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
18d60 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
18d70 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
18d80 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
18d90 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a  porary index .**
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
18dc0 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
18dd0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
18de0 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
18df0 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
18e00 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
18e10 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
18e20 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18e30 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
18e40 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
18e50 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
18e60 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
18e70 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
18e80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
18e90 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
18ea0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
18eb0 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
18ec0 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
18ed0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
18ee0 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18f00 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
18f10 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
18f20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
18f30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18f40 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
18f50 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
18f60 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
18f70 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
18f80 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
18f90 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
18fa0 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
18fb0 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
18fc0 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
18fd0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
18fe0 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
18ff0 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
19000 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
19010 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
19020 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
19040 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
19050 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
19060 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
19070 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
19080 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
19090 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
190a0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
190d0 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
190e0 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
190f0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
19100 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
19110 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
19120 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
19130 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
19160 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
19170 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
19180 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
19190 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
191a0 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
191b0 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
191c0 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
191d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
191e0 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
191f0 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
19200 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
19210 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20  SDParm. .**     
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
19240 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
19250 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
19260 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19270 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
19280 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
19290 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
192a0 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
192b0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
192c0 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
192d0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
192e0 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
192f0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
19300 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
19310 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
19320 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
19330 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
19360 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
19370 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
19380 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19390 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
193a0 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
193b0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
193c0 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
193f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
19400 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
19410 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
19420 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
19430 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
19460 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
19470 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
19480 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
19490 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
194a0 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
194b0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
194c0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
194d0 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
194e0 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
194f0 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
19500 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
19510 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
19520 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19530 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
19540 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
19550 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19560 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
19570 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
19580 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19590 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
195a0 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
195b0 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
195c0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
195d0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
195e0 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
195f0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
19600 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
19610 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
19620 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
19650 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
19660 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
19670 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19680 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
19690 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
196a0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
196b0 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
196c0 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
196d0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
196e0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
19710 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
19720 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
19730 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19740 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
19750 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
19760 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
19770 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
19780 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19790 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
197a0 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
197b0 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
197c0 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
197d0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
197e0 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
197f0 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
19800 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
19830 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
19840 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
19850 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
19880 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
19890 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
198a0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
198b0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
198c0 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
198d0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
198e0 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
198f0 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
19900 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
19910 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
19940 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
19950 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
19960 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
19970 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
19980 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
19990 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
199a0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
199b0 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
199c0 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
199d0 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
199e0 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
199f0 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
19a00 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
19a10 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
19a20 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
19a30 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
19a40 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
19a50 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
19a60 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
19a70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
19a80 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
19a90 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19aa0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
19ab0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
19ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19ad0 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
19ae0 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
19af0 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
19b00 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
19b10 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
19b20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
19b30 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
19b40 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
19b50 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
19b60 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
19b70 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
19b80 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
19b90 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
19ba0 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
19bb0 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
19bc0 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
19bd0 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
19be0 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
19bf0 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
19c00 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
19c10 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
19c20 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
19c30 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
19c40 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
19c50 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
19c60 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
19c70 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
19c80 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
19c90 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
19ca0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
19cb0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
19cc0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
19cd0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
19ce0 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
19cf0 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
19d00 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
19d10 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
19d20 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
19d30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
19d40 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
19d50 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
19d60 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
19d70 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
19d80 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
19d90 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
19da0 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
19db0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
19dc0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
19dd0 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
19de0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
19df0 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
19e00 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
19e10 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
19e20 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
19e30 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
19e40 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
19e50 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
19e60 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
19e70 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
19e80 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69         /* Affini
19e90 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
19ea0 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
19eb0 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
19ec0 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
19ed0 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
19ee0 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
19ef0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
19f00 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
19f10 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
19f20 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
19f30 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
19f40 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
19f50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19f60 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
19f70 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72  ocated */.  Expr
19f80 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
19f90 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
19fa0 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
19fb0 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
19fc0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
19fd0 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
19fe0 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
19ff0 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
1a000 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
1a010 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c  MENT .** tables,
1a020 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1a030 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74  nformation is at
1a040 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61  tached to the Ta
1a050 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a  ble.u.autoInc.p.
1a060 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61  ** pointer of ea
1a070 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  ch autoincrement
1a080 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64   table to record
1a090 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72   some side infor
1a0a0 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74  mation that.** t
1a0b0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1a0c0 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76  r needs.  We hav
1a0d0 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61  e to keep per-ta
1a0e0 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ble autoincremen
1a0f0 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  t.** information
1a100 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73   in case inserts
1a110 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e   are down within
1a120 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67   triggers.  Trig
1a130 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e  gers do not.** n
1a140 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61  ormally coordina
1a150 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74  te their activit
1a160 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e  ies, but we do n
1a170 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74  eed to coordinat
1a180 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67  e the.** loading
1a190 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61   and saving of a
1a1a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66  utoincrement inf
1a1b0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1a1c0 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
1a1d0 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  {.  AutoincInfo 
1a1e0 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78  *pNext;   /* Nex
1a1f0 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20  t info block in 
1a200 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61  a list of them a
1a210 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ll */.  Table *p
1a220 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Tab;          /*
1a230 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f   Table this info
1a240 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f   block refers to
1a250 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1a260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a270 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e  ndex in sqlite3.
1a280 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73  aDb[] of databas
1a290 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a  e holding pTab *
1a2a0 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20  /.  int regCtr; 
1a2b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
1a2c0 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c  ory register hol
1a2d0 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63  ding the rowid c
1a2e0 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ounter */.};../*
1a2f0 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20  .** Size of the 
1a300 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a  column cache.*/.
1a310 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e  #ifndef SQLITE_N
1a320 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69  _COLCACHE.# defi
1a330 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ne SQLITE_N_COLC
1a340 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a  ACHE 10.#endif..
1a350 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
1a360 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
1a370 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1a380 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
1a390 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74  d for each .** t
1a3a0 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1a3b0 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1a3c0 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1a3d0 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1a3e0 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1a3f0 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1a400 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1a410 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1a420 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1a430 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1a440 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1a450 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1a460 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1a470 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1a480 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1a490 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1a4a0 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1a4b0 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1a4c0 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1a4d0 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1a4e0 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1a4f0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a500 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1a510 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1a520 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1a530 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1a540 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1a550 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1a560 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1a570 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1a580 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1a590 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1a5a0 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1a5b0 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1a5c0 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1a5d0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1a5e0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1a5f0 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1a600 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1a610 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1a620 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1a630 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1a640 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a  lt of INSERT .**
1a650 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1a660 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1a670 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1a680 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1a690 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1a6a0 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1a6b0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1a6c0 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1a6d0 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1a6e0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1a6f0 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1a700 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1a710 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1a720 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1a730 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1a740 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1a750 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1a760 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1a770 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1a780 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1a790 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1a7a0 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1a7b0 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1a7c0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1a7d0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1a7e0 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1a7f0 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1a800 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1a810 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1a820 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1a830 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1a840 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1a850 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1a860 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1a870 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1a880 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a890 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1a8a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1a8b0 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1a8c0 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1a8d0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1a8e0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1a8f0 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1a900 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1a910 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1a920 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1a930 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1a940 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a950 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1a960 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1a970 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1a980 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1a990 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1a9a0 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1a9b0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1a9c0 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1a9d0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1a9e0 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1a9f0 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1aa00 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1aa10 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1aa20 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1aa30 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1aa40 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1aa50 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1aa60 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1aa70 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1aa80 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1aa90 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1aaa0 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1aab0 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1aac0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1aad0 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1aae0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1aaf0 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1ab00 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1ab10 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1ab20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1ab30 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1ab40 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1ab50 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1ab60 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1ab70 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1ab80 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1ab90 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1aba0 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1abb0 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1abc0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1abd0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1abe0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1abf0 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1ac00 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1ac10 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1ac20 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1ac30 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1ac40 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1ac50 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1ac60 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1ac70 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1ac80 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1ac90 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1aca0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1acb0 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1acc0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1acd0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1ace0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1acf0 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65  ache .** feature
1ad00 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1ad10 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1ad20 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1ad30 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1ad40 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1ad50 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1ad60 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1ad70 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1ad80 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1ad90 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1ada0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1adb0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1adc0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1add0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1ade0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1adf0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1ae00 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1ae10 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1ae20 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1ae30 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1ae40 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1ae50 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1ae60 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1ae70 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1ae80 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1ae90 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aeb0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1aec0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1aed0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1aee0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1aef0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1af00 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1af10 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1af20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1af30 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1af40 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1af50 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1af60 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1af70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1af80 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1af90 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1afa0 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1afb0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1afc0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1afd0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1afe0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1aff0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1b000 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1b010 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1b020 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1b030 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1b040 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1b050 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1b060 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1b070 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1b080 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1b090 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1b0a0 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1b0b0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1b0c0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1b0d0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1b0e0 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1b0f0 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1b100 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1b110 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1b120 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1b130 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
1b140 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
1b150 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
1b160 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1b170 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1b180 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1b190 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1b1a0 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1b1b0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1b1c0 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1b1d0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1b1e0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1b1f0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1b200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b210 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1b220 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1b230 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b240 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1b250 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1b260 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1b270 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1b280 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1b290 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1b2a0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
1b2b0 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
1b2c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
1b2d0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1b2e0 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
1b2f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b300 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
1b310 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
1b320 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f  */.  int nOpAllo
1b330 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1b340 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
1b350 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1b360 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
1b370 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20  FixedOp;        
1b380 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75  /* Never back ou
1b390 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64  t opcodes iFixed
1b3a0 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20  Op-1 or earlier 
1b3b0 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
1b3c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1b3d0 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
1b3e0 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
1b3f0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
1b400 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61 62   int iPartIdxTab
1b410 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
1b420 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b430 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1b440 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1b450 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1b460 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1b470 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1b480 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1b490 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1b4a0 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1b4b0 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1b4c0 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1b4d0 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1b4e0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1b4f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b500 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1b510 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1b520 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1b530 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1b540 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75  labels */.  stru
1b550 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1b560 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1b570 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1b580 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1b590 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1b5a0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1b5b0 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1b5c0 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1b5d0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1b5e0 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1b5f0 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1b600 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1b610 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1b620 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1b630 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1b640 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1b650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b660 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1b670 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1b680 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1b690 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1b6a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1b6b0 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1b6c0 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1b6d0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1b6e0 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1b6f0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1b700 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1b710 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1b720 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70  e entry */.  Exp
1b730 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70  rList *pConstExp
1b740 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78  r;/* Constant ex
1b750 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54  pressions */.  T
1b760 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
1b770 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
1b780 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
1b790 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
1b7a0 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73  rsed */.  yDbMas
1b7b0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
1b7c0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
1b7d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
1b7e0 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
1b7f0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
1b800 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
1b810 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
1b820 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
1b830 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
1b840 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
1b850 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
1b860 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
1b870 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
1b880 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1b890 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1b8a0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1b8b0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1b8c0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1b8d0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1b8e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1b8f0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1b900 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1b910 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1b920 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1b930 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1b940 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1b950 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1b960 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1b970 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1b980 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1b990 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b9a0 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1b9b0 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1b9c0 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1b9d0 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1b9e0 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1b9f0 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1ba00 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1ba10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1ba20 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1ba30 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1ba40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1ba50 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1ba60 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1ba70 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1ba80 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1ba90 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1baa0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1bab0 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1bac0 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1bad0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1bae0 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1baf0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1bb00 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1bb10 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1bb20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1bb30 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1bb40 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1bb50 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1bb60 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1bb70 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1bb80 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1bb90 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1bba0 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1bbb0 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1bbc0 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1bbd0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1bbe0 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1bbf0 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1bc00 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e  TE TABLE */.  in
1bc10 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20  t addrSkipPK;   
1bc20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1bc30 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
1bc40 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59  skip PRIMARY KEY
1bc50 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20   index */.  u32 
1bc60 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1bc70 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1bc80 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1bc90 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1bca0 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1bcb0 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1bcc0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1bcd0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1bce0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1bcf0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1bd00 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1bd10 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1bd20 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1bd30 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1bd40 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1bd50 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1bd60 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1bd70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1bd80 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1bd90 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1bda0 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1bdb0 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1bdc0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1bdd0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1bde0 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1bdf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1be30 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1be40 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1be50 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1be60 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1be70 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1be80 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1be90 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1bea0 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1beb0 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1bec0 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1bed0 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1bee0 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1bef0 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1bf00 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1bf10 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1bf20 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1bf30 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1bf40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1bf80 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1bf90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bfa0 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1bfb0 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1bfc0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1bfd0 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1bfe0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1bff0 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1c000 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1c010 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1c020 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1c030 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1c040 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1c050 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62  RY KEY */.  u8 b
1c060 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20 20  FreeWith;       
1c070 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1c080 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65   pWith should be
1c090 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72 73   freed with pars
1c0a0 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  er */.  u8 expla
1c0b0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1c0c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1c0d0 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1c0e0 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1c0f0 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1c100 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1c110 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1c120 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1c130 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1c140 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1c150 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1c160 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1c170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c180 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1c190 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1c1a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1c1b0 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1c1c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c1d0 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1c1e0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1c1f0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1c200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c210 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1c220 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1c230 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1c240 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c250 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1c260 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1c270 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1c280 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1c290 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1c2a0 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1c2b0 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1c2c0 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1c2d0 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1c2e0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1c2f0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1c300 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1c310 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1c320 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1c330 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1c340 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1c350 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1c360 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1c370 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1c380 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1c390 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1c3a0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1c3b0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1c3c0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1c3d0 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1c3e0 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1c3f0 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1c400 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1c410 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1c420 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1c430 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1c440 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1c450 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1c460 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1c470 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1c480 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1c490 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1c4a0 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1c4b0 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1c4c0 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1c4d0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1c4e0 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1c4f0 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1c500 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1c510 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1c520 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1c530 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1c540 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c550 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1c560 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1c570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1c580 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1c590 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1c5a0 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1c5b0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1c5c0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1c5d0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1c5e0 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1c5f0 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1c600 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1c610 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1c620 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1c630 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1c640 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1c650 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1c660 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1c670 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1c680 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1c690 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c6a0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1c6b0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1c6c0 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  NULL */.};../*.*
1c6d0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1c6e0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1c6f0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1c700 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1c710 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1c720 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c730 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1c740 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1c750 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1c760 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1c770 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1c780 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1c790 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1c7a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1c7b0 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1c7c0 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1c7d0 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1c7e0 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1c7f0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1c800 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1c810 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1c820 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1c830 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1c840 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1c850 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1c860 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1c870 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1c880 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1c890 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1c8a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1c8b0 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1c8c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1c8d0 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1c8e0 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1c8f0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1c900 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1c910 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1c920 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1c930 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1c940 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c950 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
1c960 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
1c970 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
1c980 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
1c990 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1c9a0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1c9b0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1c9c0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1c9d0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1c9e0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1c9f0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1ca00 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1ca10 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1ca20 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ca30 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1ca40 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1ca50 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1ca60 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1ca70 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1ca80 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1ca90 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1caa0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1cab0 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1cac0 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1cad0 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1cae0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1caf0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1cb00 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1cb10 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1cb20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1cb30 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1cb40 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1cb50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cb60 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1cb70 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1cb80 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1cb90 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1cba0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1cbb0 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1cbc0 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  02    /* P2 to O
1cbd0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1cbe0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1cbf0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1cc00 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1cc10 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1cc20 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1cc30 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1cc40 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1cc50 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1cc60 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1cc70 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1cc80 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1cc90 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1cca0 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1ccb0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1ccc0 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1ccd0 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1cce0 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1ccf0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1cd00 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1cd10 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1cd20 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1cd30 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1cd40 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1cd50 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1cd60 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1cd70 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1cd80 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1cd90 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1cda0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1cdb0 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1cdc0 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1cdd0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1cde0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1cdf0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1ce00 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1ce10 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1ce20 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1ce30 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1ce40 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1ce50 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1ce60 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1ce70 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1ce80 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1ce90 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1cea0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1ceb0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1cec0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1ced0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1cee0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1cef0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1cf00 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1cf10 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1cf20 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1cf30 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1cf40 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf60 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1cf70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1cf80 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1cf90 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1cfa0 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1cfb0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cfd0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1cfe0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1cff0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1d000 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1d010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d020 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1d030 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1d040 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1d050 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1d060 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1d070 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1d080 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1d090 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1d0a0 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1d0b0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1d0c0 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1d0d0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1d0e0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1d110 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1d120 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1d130 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1d140 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1d150 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1d160 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1d170 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1d180 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1d190 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1d1a0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1d1b0 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1d1c0 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1d1d0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1d1e0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1d1f0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1d200 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1d210 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1d220 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1d230 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1d240 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1d250 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1d260 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1d270 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1d280 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1d290 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1d2a0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1d2b0 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1d2c0 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1d2d0 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1d2e0 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1d2f0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1d300 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1d310 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1d320 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1d330 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1d340 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1d350 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1d360 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1d370 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1d380 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1d390 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1d3a0 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1d3b0 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1d3c0 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1d3d0 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1d3e0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1d3f0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1d400 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1d410 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1d420 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1d430 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1d440 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1d450 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1d460 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1d470 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1d480 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1d490 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1d4a0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1d4b0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1d4c0 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1d4d0 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1d4e0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1d4f0 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1d500 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1d510 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1d520 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1d530 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1d540 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1d550 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1d560 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1d570 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1d580 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1d590 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1d5a0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1d5b0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1d5c0 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1d5d0 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1d5e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1d5f0 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1d600 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1d610 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1d620 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1d630 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1d640 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1d650 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1d660 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1d670 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1d680 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d690 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1d6a0 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1d6b0 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1d6c0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1d6d0 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1d6e0 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1d6f0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d700 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1d710 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1d720 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1d730 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1d740 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1d750 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1d760 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1d770 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1d780 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1d790 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1d7a0 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1d7b0 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1d7c0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1d7d0 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1d7e0 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1d7f0 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1d800 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1d810 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1d820 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
1d830 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1d840 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1d850 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1d860 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1d870 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1d880 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1d890 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1d8a0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1d8b0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1d8c0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1d8d0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1d8e0 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1d8f0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1d900 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1d910 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1d920 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1d930 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1d940 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
1d950 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1d960 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d970 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1d980 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1d990 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1d9b0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d9c0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1d9d0 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1d9e0 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1d9f0 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1da00 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1da10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1da20 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1da30 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1da40 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1da50 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1da60 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1da70 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1da80 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1da90 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1daa0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1dab0 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1dac0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1dad0 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1dae0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1daf0 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1db00 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1db10 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1db20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1db30 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1db40 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1db50 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1db60 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1db70 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
1db80 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
1db90 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1dba0 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
1dbb0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1dbc0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1dbd0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1dbe0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1dbf0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1dc00 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1dc10 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1dc20 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1dc30 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1dc40 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1dc50 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1dc60 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1dc70 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1dc80 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1dc90 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1dca0 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1dcb0 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1dcc0 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1dcd0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1dce0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1dcf0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1dd00 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1dd10 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1dd20 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1dd30 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1dd40 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1dd50 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1dd60 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1dd70 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1dd80 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1dd90 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1dda0 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1ddb0 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1ddc0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1ddd0 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1dde0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1ddf0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1de00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1de10 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1de20 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1de30 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1de40 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1de50 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1de60 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1de70 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1de80 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1de90 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1dea0 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1deb0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1dec0 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1ded0 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1dee0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1def0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1df00 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1df10 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1df20 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1df30 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1df40 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1df50 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1df60 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1df70 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1df80 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1df90 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1dfa0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1dfb0 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1dfc0 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1dfd0 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1dfe0 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1dff0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1e000 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1e010 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1e020 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1e030 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1e040 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1e050 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1e060 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1e070 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1e080 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1e090 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1e0a0 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1e0b0 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1e0c0 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1e0d0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1e0e0 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1e0f0 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1e100 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1e110 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1e120 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1e130 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1e140 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1e150 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1e160 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1e170 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1e180 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1e190 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1e1a0 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  d string length 
1e1b0 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1e1c0 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1e1d0 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1e1e0 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1e1f0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1e200 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1e210 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1e220 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1e230 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1e240 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1e250 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1e260 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1e270 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1e280 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1e290 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1e2a0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1e2b0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1e2c0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1e2d0 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1e2e0 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1e2f0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1e300 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1e310 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1e320 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1e330 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1e340 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1e350 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1e360 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1e370 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1e380 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1e390 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1e3a0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1e3b0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1e3c0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1e3d0 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1e3e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e3f0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1e400 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1e410 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1e420 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1e430 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1e440 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1e450 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1e460 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1e470 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1e480 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1e490 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1e4a0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1e4b0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1e4c0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e4e0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e4f0 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1e500 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1e510 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e520 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e530 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1e540 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1e550 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e570 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1e580 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1e590 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1e5c0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1e5d0 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1e5e0 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1e610 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1e620 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1e630 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e650 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1e660 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1e670 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1e6a0 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1e6b0 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1e6c0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1e6d0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1e6e0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1e6f0 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1e700 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1e730 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1e740 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1e750 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1e760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1e770 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1e780 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1e790 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1e7a0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1e7b0 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1e7c0 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1e7d0 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1e7e0 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1e7f0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1e800 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1e810 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1e820 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1e830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e840 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1e850 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1e860 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1e890 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1e8a0 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e8c0 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1e8d0 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1e8e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1e8f0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1e900 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1e910 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1e920 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1e930 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e950 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1e960 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1e970 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1e9a0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1e9b0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1e9c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1e9d0 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1e9e0 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1e9f0 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1ea20 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1ea30 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1ea60 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1ea70 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea90 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1eaa0 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1eab0 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1eae0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1eaf0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1eb00 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1eb10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1eb20 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1eb30 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1eb40 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1eb50 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1eb60 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1eb70 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1eb80 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1eb90 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
1ebc0 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
1ebd0 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1ebe0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1ebf0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1ec00 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1ec10 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1ec20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1ec30 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1ec40 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1ec50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ec60 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ec70 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1ec80 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1ec90 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1eca0 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1ecb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ecc0 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1ecd0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1ece0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1ecf0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1ed00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ed10 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1ed20 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1ed30 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1ed40 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1ed50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ed60 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1ed70 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1ed80 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1edb0 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1edc0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
1edd0 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1edf0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
1ee00 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
1ee10 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1ee20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1ee30 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1ee40 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1ee50 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
1ee60 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1ee70 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1ee80 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1ee90 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1eea0 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eec0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
1eed0 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1eee0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
1eef0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1ef00 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1ef10 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1ef20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1ef30 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1ef40 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
1ef50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
1ef60 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
1ef70 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
1ef80 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
1ef90 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
1efa0 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
1efb0 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
1efc0 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
1efd0 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
1efe0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
1eff0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
1f000 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
1f010 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
1f020 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
1f030 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
1f040 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
1f050 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
1f060 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f080 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
1f090 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
1f0a0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1f0b0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1f0c0 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  ST.  int (*xTest
1f0d0 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
1f0e0 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
1f0f0 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
1f100 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
1f110 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1f120 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1f130 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1f140 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1f150 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   calls */.};../*
1f160 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
1f170 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
1f180 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
1f190 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
1f1a0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
1f1b0 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
1f1c0 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
1f1d0 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
1f1e0 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
1f1f0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
1f200 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
1f210 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
1f220 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
1f230 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
1f240 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
1f250 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
1f260 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
1f270 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
1f280 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
1f290 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
1f2a0 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
1f2b0 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
1f2c0 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
1f2d0 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
1f2e0 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
1f2f0 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
1f300 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
1f310 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
1f320 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
1f330 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
1f340 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1f350 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
1f360 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
1f370 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
1f380 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1f390 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
1f3a0 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
1f3b0 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
1f3c0 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
1f3d0 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
1f3e0 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
1f3f0 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
1f400 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
1f410 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
1f420 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
1f430 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1f440 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
1f450 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
1f460 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
1f470 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
1f480 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
1f490 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1f4a0 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
1f4b0 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
1f4c0 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
1f4d0 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
1f4e0 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
1f4f0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1f500 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1f530 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
1f540 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f560 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f570 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
1f580 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
1f5c0 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
1f5d0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
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 20 20 20 2f 2a 20 45 78 74            /* Ext
1f600 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
1f610 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
1f620 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f640 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
1f650 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1f660 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
1f690 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
1f6a0 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
1f6d0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1f6e0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1f6f0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f710 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1f720 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1f730 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1f760 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1f770 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1f780 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1f790 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1f7a0 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1f7b0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1f7c0 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1f7d0 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1f7e0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1f7f0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1f800 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1f810 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1f820 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1f830 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1f840 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1f850 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1f860 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1f870 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1f880 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1f890 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1f8a0 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1f8b0 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1f8c0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1f8d0 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1f8e0 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1f8f0 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1f900 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1f910 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1f920 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1f930 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1f940 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1f950 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1f960 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1f970 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1f980 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
1f990 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1f9a0 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
1f9b0 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
1f9c0 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
1f9d0 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
1f9e0 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
1f9f0 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
1fa00 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
1fa10 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
1fa20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
1fa50 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
1fa60 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
1fa70 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
1fa80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1fa90 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
1faa0 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1fab0 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fad0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
1fae0 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
1faf0 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
1fb00 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
1fb30 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
1fb40 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1fb60 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
1fb70 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
1fb80 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
1fb90 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fbb0 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
1fbc0 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
1fbd0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1fbe0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
1fbf0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1fc00 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
1fc10 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1fc20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
1fc30 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1fc40 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1fc50 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
1fc60 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
1fc70 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
1fc80 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
1fc90 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
1fca0 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
1fcb0 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
1fcc0 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
1fcd0 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
1fce0 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
1fcf0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
1fd00 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
1fd10 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
1fd20 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
1fd30 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
1fd40 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
1fd50 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
1fd60 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
1fd70 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
1fd80 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
1fd90 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
1fda0 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
1fdb0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1fdc0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
1fdd0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
1fde0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
1fdf0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1fe00 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
1fe10 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
1fe20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
1fe30 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
1fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe50 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
1fe60 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
1fe70 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1fe90 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
1fea0 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
1feb0 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
1fec0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
1ff10 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
1ff20 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
1ff30 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
1ff40 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
1ff50 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
1ff60 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
1ff70 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
1ff80 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
1ff90 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
1ffa0 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
1ffb0 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
1ffc0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
1ffd0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
1ffe0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
1fff0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
20000 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
20010 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
20020 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
20030 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
20040 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
20050 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
20060 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
20070 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
20080 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
20090 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
200a0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
200b0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
200c0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
200d0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
200e0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
200f0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
20100 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
20110 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
20120 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
20130 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
20140 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
20150 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
20160 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
20170 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
20180 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
20190 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
201a0 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
201b0 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
201c0 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
201d0 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
201e0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
201f0 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
20200 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
20210 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
20220 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
20230 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20240 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
20250 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20260 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
20270 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
20280 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
20290 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
202a0 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
202b0 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
202c0 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
202d0 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
202e0 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
202f0 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
20300 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
20310 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
20320 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
20330 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
20340 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
20350 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
20360 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
20370 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
20380 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
20390 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
203a0 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
203b0 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
203c0 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
203d0 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
203e0 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
203f0 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
20400 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
20410 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
20420 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
20430 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
20440 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
20450 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
20460 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
20470 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
20480 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
20490 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
204a0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
204b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
204c0 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
204d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
204e0 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
204f0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20500 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20510 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
20520 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
20530 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20540 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20550 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
20560 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
20570 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
20580 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20590 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
205a0 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
205b0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
205c0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
205d0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
205e0 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
205f0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
20600 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
20610 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20620 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20630 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
20640 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
20650 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
20660 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
20670 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
20680 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20690 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
206a0 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
206b0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
206c0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
206d0 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
206e0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
206f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20700 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
20710 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
20720 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
20730 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
20740 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
20750 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20760 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20770 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
20780 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
20790 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
207a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
207b0 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
207c0 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
207d0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
207e0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
207f0 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
20800 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20810 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
20820 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
20830 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
20840 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
20850 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73  pes.*/.#define s
20860 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71  qlite3StrICmp sq
20870 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e  lite3_stricmp.in
20880 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
20890 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
208a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
208b0 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
208c0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
208d0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
208e0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
208f0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
20900 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
20910 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
20920 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
20930 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
20940 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
20950 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
20960 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
20970 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
20980 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
20990 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
209a0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
209b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
209c0 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
209d0 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
209e0 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76  t char*, u64);.v
209f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
20a00 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
20a10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
20a20 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
20a30 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
20a40 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
20a50 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
20a60 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
20a70 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
20a80 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
20a90 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
20aa0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
20ab0 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
20ac0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
20ad0 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
20ae0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
20af0 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69  3ScratchMalloc(i
20b00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20b10 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69  3ScratchFree(voi
20b20 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
20b30 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
20b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
20b50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
20b60 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
20b70 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
20b80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
20b90 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
20ba0 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
20bb0 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
20bc0 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
20bd0 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
20be0 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
20bf0 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
20c00 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
20c10 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
20c20 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
20c30 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
20c40 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
20c50 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
20c60 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
20c70 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
20c80 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
20c90 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
20ca0 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
20cb0 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
20cc0 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
20cd0 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
20ce0 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
20cf0 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
20d00 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
20d10 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
20d20 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
20d30 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
20d40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20d50 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
20d60 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
20d70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20d80 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
20d90 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
20da0 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
20db0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20dc0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
20dd0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20de0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20df0 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
20e00 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
20e10 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
20e20 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
20e30 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
20e40 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
20e50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20e60 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
20e70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
20e80 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
20e90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
20ea0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
20eb0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
20ec0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
20ed0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
20ee0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
20ef0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20f00 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
20f10 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
20f20 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
20f30 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
20f40 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
20f50 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
20f60 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
20f70 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
20f80 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
20f90 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
20fa0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
20fb0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
20fc0 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
20fd0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
20fe0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
20ff0 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
21000 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
21010 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
21020 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
21030 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
21040 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
21050 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
21060 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
21070 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  Add(int, int);.v
21080 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
21090 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sSet(int, int);.
210a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
210b0 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
210c0 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
210d0 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
210e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
210f0 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
21100 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
21110 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
21120 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
21130 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
21140 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
21150 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
21160 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
21170 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
21180 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
21190 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
211a0 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
211b0 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
211c0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
211d0 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
211e0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
211f0 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21210 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
21220 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
21230 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
21240 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
21250 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
21260 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65  alues */.};..#de
21270 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21280 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
21290 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
212a0 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
212b0 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65  0x02.void sqlite
212c0 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
212d0 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
212e0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
212f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
21300 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
21310 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
21320 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
21330 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
21340 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21350 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
21360 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
21370 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21380 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63  ar*, va_list);.c
21390 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70  har *sqlite3MApp
213a0 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68  endf(sqlite3*,ch
213b0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
213c0 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ...);.#if define
213d0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
213e0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
213f0 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
21400 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
21410 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
21420 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
21430 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
21440 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
21450 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
21460 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
21470 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
21480 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
21490 29 0a 20 20 54 72 65 65 56 69 65 77 20 2a 73 71  ).  TreeView *sq
214a0 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73  lite3TreeViewPus
214b0 68 28 54 72 65 65 56 69 65 77 2a 2c 75 38 29 3b  h(TreeView*,u8);
214c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
214d0 72 65 65 56 69 65 77 50 6f 70 28 54 72 65 65 56  reeViewPop(TreeV
214e0 69 65 77 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  iew*);.  void sq
214f0 6c 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e  lite3TreeViewLin
21500 65 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  e(TreeView*, con
21510 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
21520 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21530 65 65 56 69 65 77 49 74 65 6d 28 54 72 65 65 56  eeViewItem(TreeV
21540 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  iew*, const char
21550 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
21560 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
21570 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  pr(TreeView*, co
21580 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  nst Expr*, u8);.
21590 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
215a0 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
215b0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
215c0 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
215d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
215e0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
215f0 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
21600 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
21610 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  t*, u8);.#endif.
21620 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
21630 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
21640 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
21650 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
21660 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
21670 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
21680 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
21690 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
216a0 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
216b0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
216c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
216d0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
216e0 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
216f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
21700 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
21710 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
21720 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
21730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
21740 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
21750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
21760 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
21770 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
21780 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
21790 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
217a0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
217b0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
217c0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
217d0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
217e0 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
217f0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21800 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
21810 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
21820 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
21830 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
21840 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
21850 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
21860 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
21870 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
21880 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
21890 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
218a0 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
218b0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
218c0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
218d0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
218e0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
218f0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
21900 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
21910 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
21920 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
21930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21940 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
21950 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
21960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21970 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
21980 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
21990 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
219a0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
219b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
219c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
219d0 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
219e0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
219f0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
21a00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
21a10 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
21a20 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
21a30 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
21a40 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
21a50 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
21a60 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21a70 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
21a80 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
21a90 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
21aa0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
21ab0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
21ac0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
21ad0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
21ae0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
21af0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21b00 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
21b10 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
21b20 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
21b30 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
21b40 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
21b50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21b60 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
21b70 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
21b80 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
21b90 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
21ba0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21bb0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
21bc0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
21bd0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
21be0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
21bf0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
21c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
21c10 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
21c20 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
21c30 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
21c40 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
21c50 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
21c60 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
21c70 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
21c80 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
21c90 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
21ca0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
21cb0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
21cc0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
21cd0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
21ce0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
21cf0 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
21d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21d10 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
21d20 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
21d30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
21d40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
21d50 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
21d60 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
21d70 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
21d80 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
21d90 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
21da0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
21db0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
21dc0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
21dd0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
21de0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
21df0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21e00 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
21e10 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
21e20 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
21e30 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
21e40 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
21e50 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
21e60 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
21e70 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
21e80 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
21e90 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
21ea0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
21eb0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
21ec0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
21ed0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
21ee0 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
21ef0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
21f00 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
21f10 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
21f20 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
21f30 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
21f40 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
21f50 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
21f60 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
21f70 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
21f80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
21f90 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
21fa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
21fb0 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
21fc0 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
21fd0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
21fe0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
21ff0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22000 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
22010 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
22020 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
22030 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
22040 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
22050 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
22060 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
22070 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
22080 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
22090 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
220a0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
220b0 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
220c0 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
220d0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
220e0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
220f0 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
22100 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
22110 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
22120 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
22130 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
22140 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
22150 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
22160 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22170 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
22180 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
22190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
221a0 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
221b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
221c0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
221d0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
221e0 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
221f0 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
22200 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
22210 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
22220 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
22230 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
22240 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
22250 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
22260 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
22270 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22280 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
22290 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
222a0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
222b0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
222c0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
222d0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
222e0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
222f0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
22300 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
22310 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
22320 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
22330 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
22340 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
22350 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
22360 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
22370 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
22380 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
22390 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
223a0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
223b0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
223c0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
223d0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
223e0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
223f0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
22400 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
22410 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
22420 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
22430 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
22440 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
22450 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
22460 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
22470 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
22480 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
22490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
224a0 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
224b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
224c0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
224d0 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
224e0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
224f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
22500 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
22510 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
22520 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
22530 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
22540 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
22550 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
22560 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
22570 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
22580 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
225b0 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
225c0 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
225d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
225e0 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
225f0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
22600 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73   Token *);.int s
22610 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
22620 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
22630 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
22640 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
22650 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
22660 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
22670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22680 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
22690 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
226a0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
226b0 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
226c0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
226d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
226e0 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
226f0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
22700 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
22710 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
22720 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
22730 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
22740 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
22750 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
22760 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
22770 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
22780 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
227b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
227c0 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
227d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
227e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
227f0 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
22800 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
22810 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
22820 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
22830 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
22840 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
22850 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
22860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22870 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
22880 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45  ist*,u16,Expr*,E
22890 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
228a0 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
228b0 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
228c0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
228d0 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
228e0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
228f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
22900 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
22910 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
22920 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
22930 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
22940 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
22950 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
22960 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22970 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
22980 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
22990 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
229a0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
229b0 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
229c0 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
229d0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
229e0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
229f0 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
22a00 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
22a10 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
22a20 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
22a30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22a40 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
22a50 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
22a60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22a70 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
22a80 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
22a90 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
22aa0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
22ab0 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
22ac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
22ad0 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
22ae0 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68  );.u64 sqlite3Wh
22af0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
22b00 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
22b10 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
22b20 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
22b30 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22b40 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
22b50 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
22b60 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
22b70 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
22b80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22b90 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
22ba0 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
22bb0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
22bc0 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
22bd0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22be0 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
22bf0 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
22c00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22c10 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
22c20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22c30 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
22c40 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22c50 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
22c60 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
22c70 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22c80 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22c90 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
22ca0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
22cb0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22cc0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
22cd0 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
22ce0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22cf0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22d00 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
22d10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22d20 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
22d30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22d40 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
22d50 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
22d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22d70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
22d80 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22d90 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
22da0 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
22db0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22dc0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22dd0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
22de0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22df0 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72  e3ExprCodeFactor
22e00 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70  able(Parse*, Exp
22e10 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
22e20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74  qlite3ExprCodeAt
22e30 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70  Init(Parse*, Exp
22e40 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  r*, int, u8);.in
22e50 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22e60 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
22e70 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
22e80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
22e90 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
22ea0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
22eb0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
22ec0 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
22ed0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
22ee0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22ef0 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
22f00 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
22f10 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
22f20 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
22f30 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
22f40 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
22f50 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
22f60 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
22f70 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
22f80 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
22f90 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20  t terms */.void 
22fa0 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
22fb0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22fc0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22fd0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
22fe0 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
22ff0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
23000 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
23010 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
23020 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
23030 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
23040 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
23050 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
23060 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
23070 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
23080 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
23090 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
230a0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
230b0 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
230c0 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
230d0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
230e0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
230f0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
23100 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
23110 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
23120 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
23130 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
23140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
23150 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
23160 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
23170 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23180 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
23190 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
231a0 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
231b0 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
231c0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
231d0 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
231e0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
231f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
23200 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
23210 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
23220 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
23230 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
23240 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
23250 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23260 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72  ImpliesExpr(Expr
23270 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23280 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23290 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
232a0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
232b0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
232c0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
232d0 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
232e0 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
232f0 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
23300 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
23310 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
23320 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
23330 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76  tVdbe(Parse*);.v
23340 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
23350 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
23360 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
23370 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
23380 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
23390 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
233a0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
233b0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
233c0 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
233d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
233e0 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
233f0 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
23400 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
23410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
23420 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
23430 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
23440 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
23450 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
23460 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23470 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
23480 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
23490 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
234a0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
234b0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
234c0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
234d0 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
234e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
234f0 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
23500 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
23510 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23520 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
23530 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23540 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
23550 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
23560 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
23570 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
23580 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
23590 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
235a0 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
235b0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
235c0 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
235d0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
235e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
235f0 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
23600 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23610 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
23620 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
23630 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
23640 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
23650 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
23660 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23670 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72  ateRowDelete(Par
23680 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
23690 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
236a0 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76  i16,u8,u8,u8);.v
236b0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
236c0 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
236d0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
236e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
236f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
23700 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
23710 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
23720 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
23730 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
23740 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
23750 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
23760 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
23770 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
23780 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
23790 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
237a0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
237b0 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237d0 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
237e0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
237f0 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
23800 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
23810 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
23820 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
23830 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
23840 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
23850 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
23860 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23870 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
23880 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
23890 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
238a0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
238b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
238c0 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
238d0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
238e0 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
238f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
23900 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
23910 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
23920 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
23930 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
23940 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
23950 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
23960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
23970 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
23980 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
23990 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
239a0 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
239b0 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
239c0 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
239d0 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
239e0 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
239f0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
23a00 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
23a10 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
23a20 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
23a30 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
23a40 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
23a50 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
23a60 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
23a70 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
23a80 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
23a90 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
23aa0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
23ab0 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
23ac0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
23ad0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
23ae0 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
23af0 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
23b00 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
23b10 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
23b20 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
23b30 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
23b40 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
23b50 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23b60 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
23b70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
23b80 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
23b90 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
23ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
23bb0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
23bc0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
23bd0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
23be0 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
23bf0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
23c00 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
23c10 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
23c20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
23c30 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
23c40 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
23c50 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
23c60 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
23c70 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23c80 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
23c90 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23ca0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
23cb0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
23cc0 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
23cd0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
23ce0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
23cf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23d00 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
23d10 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
23d20 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
23d30 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
23d40 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
23d50 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
23d80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23d90 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
23da0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
23db0 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
23dc0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
23dd0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23de0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
23df0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
23e00 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
23e10 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
23e20 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
23e30 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
23e40 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
23e50 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
23e60 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
23e70 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
23e80 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
23e90 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
23ea0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
23eb0 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
23ec0 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
23ed0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
23ee0 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
23f10 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
23f20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
23f30 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
23f40 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
23f50 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
23f60 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
23f70 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
23f80 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
23f90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
23fa0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
23fb0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
23fc0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
23fd0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
23fe0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
23ff0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
24000 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
24010 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
24020 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
24030 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
24040 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
24050 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
24060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
24090 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
240a0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
240b0 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
240c0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
240d0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
240e0 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
240f0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
24100 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
24110 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
24120 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
24130 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
24140 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
24150 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
24160 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
24170 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
24180 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
24190 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
241a0 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
241b0 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
241c0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
241d0 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
241e0 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
241f0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
24200 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
24210 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
24220 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
24230 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24240 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
24250 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
24260 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
24270 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
24280 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
24290 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
242a0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
242b0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
242c0 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
242d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
242e0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
242f0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
24300 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
24310 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
24320 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
24330 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
24340 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
24350 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
24360 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
24370 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
24380 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
24390 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
243a0 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
243b0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
243c0 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
243d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
243e0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
243f0 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
24400 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
24410 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
24420 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
24430 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
24440 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
24450 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
24460 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24470 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
24480 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
24490 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
244a0 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
244b0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
244c0 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
244d0 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
244e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
244f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24500 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24510 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
24520 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
24530 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
24540 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24550 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
24560 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
24570 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
24580 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
24590 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
245a0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
245b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
245c0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
245d0 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
245e0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
245f0 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
24600 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
24610 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
24620 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
24630 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24640 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
24650 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
24660 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
24670 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
24680 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
24690 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
246a0 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
246b0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
246c0 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
246d0 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
246e0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
246f0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
24700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24710 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
24720 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
24730 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
24740 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
24750 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
24760 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
24770 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
24780 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
24790 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
247a0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
247b0 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
247c0 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
247d0 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
247e0 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
247f0 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
24800 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
24810 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
24820 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
24830 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
24840 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
24850 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24860 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
24870 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
24880 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20  int nChar);.int 
24890 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
248a0 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
248b0 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
248c0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
248d0 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
248e0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
248f0 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
24900 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
24910 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
24920 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
24930 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24940 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
24950 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
24960 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
24970 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65  endif.u64 sqlite
24980 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
24990 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  Est);../*.** Rou
249a0 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
249b0 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
249c0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
249d0 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
249e0 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
249f0 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
24a00 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
24a10 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
24a20 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
24a30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
24a40 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
24a50 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
24a60 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
24a70 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
24a80 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
24a90 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
24aa0 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
24ab0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
24ac0 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
24ad0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
24ae0 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
24af0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66  common case is f
24b00 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62  or a varint to b
24b10 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  e a single byte.
24b20 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67    They following
24b30 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c  .** macros handl
24b40 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
24b50 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63  e without a proc
24b60 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20  edure call, but 
24b70 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  then call.** the
24b80 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c   procedure for l
24b90 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a  arger varints..*
24ba0 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
24bb0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
24bc0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
24bd0 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
24be0 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
24bf0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
24c00 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
24c10 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
24c20 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
24c30 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
24c40 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
24c50 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
24c60 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
24c70 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23  rint((A),(B))).#
24c80 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
24c90 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
24ca0 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
24cb0 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
24cc0 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
24cd0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
24ce0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
24cf0 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
24d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
24d10 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
24d20 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
24d30 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
24d40 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
24d50 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
24d60 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
24d70 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
24d80 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
24d90 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
24da0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
24db0 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
24dc0 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
24dd0 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
24de0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
24df0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
24e00 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
24e10 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
24e20 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
24e30 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73  e3ErrorWithMsg(s
24e40 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
24e50 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
24e60 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
24e70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
24e80 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
24e90 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
24ea0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
24eb0 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
24ec0 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
24ed0 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
24ee0 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
24ef0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
24f00 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
24f10 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
24f20 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73  LITE_TEST) .cons
24f30 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
24f40 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
24f50 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
24f60 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
24f70 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24f80 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
24f90 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
24fa0 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
24fb0 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
24fc0 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
24fd0 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
24fe0 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
24ff0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
25000 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
25010 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
25020 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
25030 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
25040 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
25050 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25060 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
25070 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
25080 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
25090 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
250a0 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
250b0 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
250c0 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
250d0 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
250e0 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
250f0 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
25100 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
25110 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
25120 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
25130 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
25140 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
25150 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
25160 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
25170 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
25180 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25190 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
251a0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
251b0 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
251c0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
251d0 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
251e0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
251f0 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
25200 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25210 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
25220 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
25230 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
25240 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
25250 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25260 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
25270 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
25280 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
25290 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
252a0 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
252b0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
252c0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
252d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
252e0 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
252f0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
25300 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
25310 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
25320 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
25330 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25350 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
25360 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
25370 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
25380 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
25390 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
253a0 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
253b0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
253c0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
253d0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
253e0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
253f0 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
25400 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
25410 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
25420 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
25430 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
25440 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
25450 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
25460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
25470 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
25480 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
25490 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
254a0 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
254b0 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
254c0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
254d0 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
254e0 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
254f0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
25500 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
25510 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
25520 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
25530 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
25540 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
25550 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
25560 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
25570 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
25580 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
25590 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
255a0 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51  onfig;.extern SQ
255b0 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66  LITE_WSD FuncDef
255c0 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62  Hash sqlite3Glob
255d0 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  alFunctions;.#if
255e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
255f0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
25600 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
25610 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
25620 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
25630 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
25640 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
25650 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25660 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
25670 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
25680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25690 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
256a0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
256b0 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
256c0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
256d0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
256e0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
256f0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
25700 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
25710 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
25720 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
25730 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
25740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25750 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
25760 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
25770 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
25780 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
25790 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
257a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
257b0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
257c0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
257d0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69  NameContext*);.i
257e0 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
257f0 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
25800 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
25810 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
25820 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
25830 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
25840 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
25850 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
25860 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
25870 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
25880 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
25890 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
258a0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
258b0 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
258c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
258d0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
258e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
258f0 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
25900 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
25910 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
25920 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25930 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
25940 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
25950 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
25960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25970 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
25980 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
25990 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
259a0 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
259b0 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
259c0 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
259d0 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
259e0 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
259f0 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
25a00 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
25a10 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
25a20 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
25a30 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
25a40 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
25a50 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
25a60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
25a70 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
25a80 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
25a90 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
25aa0 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
25ab0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25ac0 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
25ad0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
25ae0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
25af0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
25b00 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
25b10 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25b20 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
25b30 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
25b40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
25b50 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
25b60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25b70 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
25b80 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
25b90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25ba0 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
25bb0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
25bc0 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
25bd0 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46   sqlite3MinimumF
25be0 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a  ileFormat(Parse*
25bf0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25c00 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
25c10 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
25c20 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
25c30 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
25c40 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
25c50 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
25c60 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
25c70 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
25c80 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
25c90 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
25ca0 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
25cb0 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
25cc0 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
25cd0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
25ce0 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
25cf0 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
25d00 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
25d10 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
25d20 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
25d30 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
25d40 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
25d50 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
25d60 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
25d70 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
25d80 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
25d90 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
25da0 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
25db0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
25dc0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
25dd0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
25de0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
25df0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
25e00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25e10 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
25e20 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
25e30 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
25e40 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
25e50 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
25e60 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
25e70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25e80 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
25e90 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
25ea0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
25eb0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
25ec0 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
25ed0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25ee0 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
25ef0 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
25f00 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
25f10 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
25f20 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d  pendAll(StrAccum
25f30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
25f40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65  void sqlite3Appe
25f50 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a  ndChar(StrAccum*
25f60 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72  ,int,char);.char
25f70 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
25f80 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
25f90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25fa0 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
25fb0 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
25fc0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
25fd0 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
25fe0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
25ff0 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
26000 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
26010 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
26020 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
26030 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
26040 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
26050 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
26060 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
26070 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
26080 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
26090 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  8 *);..#ifdef SQ
260a0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
260b0 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
260c0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
260d0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
260e0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
260f0 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72  robeSetValue(Par
26100 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63  se*,Index*,Unpac
26110 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72  kedRecord**,Expr
26120 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  *,u8,int,int*);.
26130 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
26140 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
26150 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
26160 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
26170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26180 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
26190 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
261a0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
261b0 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
261c0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
261d0 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
261e0 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66  value**);.#endif
261f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
26200 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
26210 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
26220 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
26230 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
26240 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
26250 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
26260 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
26270 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
26280 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
26290 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
262a0 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
262b0 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
262c0 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
262d0 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
262e0 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
262f0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
26300 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
26310 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
26320 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26330 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
26340 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
26350 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
26360 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
26370 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
26380 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
26390 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
263a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
263b0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
263c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
263d0 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
263e0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
263f0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
26400 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
26410 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
26420 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
26430 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
26440 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
26450 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
26460 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
26470 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26480 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
26490 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
264a0 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
264b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
264c0 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
264d0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
264e0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
264f0 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
26500 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
26510 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
26520 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
26530 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
26540 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26550 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69  Lock(X) .#  defi
26560 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
26570 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  lock(X).#  defin
26580 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
26590 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65  ockList(X).#  de
265a0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
265b0 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20  Savepoint(X, Y, 
265c0 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Z) SQLITE_OK.#  
265d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65  define sqlite3Ge
265e0 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28  tVTable(X,Y)  ((
265f0 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65  VTable*)0).#else
26600 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26610 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65  VtabClear(sqlite
26620 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a  3 *db, Table*);.
26630 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
26640 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71  tabDisconnect(sq
26650 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
26660 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   *p);.   int sql
26670 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c  ite3VtabSync(sql
26680 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29  ite3 *db, Vdbe*)
26690 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
266a0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
266b0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
266c0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
266d0 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
266e0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
266f0 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
26700 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
26710 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
26720 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
26730 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
26740 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
26750 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
26760 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73  3VtabSavepoint(s
26770 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69  qlite3 *, int, i
26780 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  nt);.   void sql
26790 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
267a0 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69  rmsg(Vdbe*, sqli
267b0 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56  te3_vtab*);.   V
267c0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65  Table *sqlite3Ge
267d0 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  tVTable(sqlite3*
267e0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65  , Table*);.#  de
267f0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26800 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
26810 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
26820 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
26830 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
26840 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
26850 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
26860 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26870 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
26880 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
26890 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
268a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
268b0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
268c0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
268d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
268e0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
268f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26900 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
26910 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
26920 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
26930 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
26940 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
26950 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
26960 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
26970 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
26980 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
26990 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
269a0 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
269b0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
269c0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
269d0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
269e0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
269f0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
26a00 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
26a10 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
26a20 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
26a30 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
26a40 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
26a50 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
26a60 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
26a70 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
26a80 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
26a90 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
26aa0 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
26ab0 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
26ac0 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
26ad0 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
26ae0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
26af0 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
26b00 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
26b10 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
26b20 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
26b30 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
26b40 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
26b50 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
26b60 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
26b70 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
26b80 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
26b90 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
26ba0 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
26bb0 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
26bc0 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
26bd0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
26be0 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
26bf0 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
26c00 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
26c10 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
26c20 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
26c30 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
26c40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
26c50 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
26c60 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
26c70 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
26c80 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
26c90 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
26ca0 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
26cb0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
26cc0 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
26cd0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26ce0 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
26cf0 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
26d00 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
26d10 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
26d20 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
26d30 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
26d40 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
26d50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
26d60 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
26d70 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
26d80 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
26d90 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
26da0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
26db0 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
26dc0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
26dd0 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
26de0 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
26df0 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
26e00 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
26e10 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
26e20 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
26e30 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
26e40 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
26e50 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
26e60 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
26e70 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
26e80 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
26e90 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
26ea0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
26eb0 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
26ec0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
26ed0 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
26ee0 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
26ef0 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
26f00 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
26f10 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
26f20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20  is .** provided 
26f30 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
26f40 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
26f50 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
26f60 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
26f70 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
26f80 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
26f90 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
26fa0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
26fb0 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
26fc0 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
26fd0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
26fe0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
26ff0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
27000 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
27010 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
27020 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
27030 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
27040 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
27050 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
27060 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
27070 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
27080 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
27090 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
270a0 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
270b0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
270c0 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
270d0 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
270e0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
270f0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
27100 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
27110 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
27120 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27130 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
27140 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
27150 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
27160 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
27170 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
27180 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
27190 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
271a0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
271b0 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
271c0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
271d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
271e0 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
271f0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
27200 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
27210 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
27220 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
27230 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
27240 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
27250 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
27260 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
27270 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
27280 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
27290 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
272a0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
272b0 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
272c0 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
272d0 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
272e0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
272f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
27300 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
27310 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
27320 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
27330 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
27340 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
27350 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
27360 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
27370 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
27380 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
27390 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
273a0 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
273b0 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
273c0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
273d0 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
273e0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
273f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27400 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
27410 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
27420 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
27430 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
27440 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
27450 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
27460 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27470 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
27480 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
27490 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
274a0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
274b0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
274c0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
274d0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
274e0 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
274f0 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
27500 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
27510 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
27520 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
27530 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
27540 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
27550 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
27560 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
27570 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27580 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
27590 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
275a0 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
275b0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
275c0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
275d0 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
275e0 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
275f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27600 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
27610 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
27620 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
27630 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
27640 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
27650 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
27660 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
27670 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
27680 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
27690 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
276a0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
276b0 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
276c0 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
276d0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
276e0 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
276f0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
27700 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
27710 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
27720 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
27730 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
27740 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
27750 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
27760 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
27770 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
27780 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
27790 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
277a0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
277b0 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
277c0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
277d0 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
277e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
277f0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
27800 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
27810 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
27820 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
27830 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27840 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
27850 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
27860 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
27870 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
27880 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
27890 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
278a0 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
278b0 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
278c0 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
278d0 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
278e0 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
278f0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
27900 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
27910 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
27920 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
27930 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
27940 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
27950 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
27960 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
27970 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
27980 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
27990 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
279a0 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
279b0 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
279c0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
279d0 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
279e0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
279f0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
27a00 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
27a10 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
27a20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
27a30 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
27a40 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
27a50 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
27a60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27a70 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
27a80 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
27a90 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
27aa0 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
27ab0 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
27ac0 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
27ad0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
27ae0 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
27af0 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
27b00 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
27b10 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
27b20 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
27b30 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27b40 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
27b50 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
27b60 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
27b70 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
27b80 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
27b90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
27ba0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
27bb0 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
27bc0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
27bd0 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
27be0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
27bf0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
27c00 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
27c10 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
27c20 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
27c30 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
27c40 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
27c50 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
27c60 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
27c70 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
27c80 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
27c90 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
27ca0 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
27cb0 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
27cc0 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
27cd0 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
27ce0 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
27cf0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
27d00 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
27d10 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
27d20 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
27d30 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
27d40 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
27d50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
27d60 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
27d70 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
27d80 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
27d90 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
27da0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
27db0 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
27dc0 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
27dd0 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
27de0 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
27df0 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
27e00 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
27e10 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
27e20 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
27e30 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
27e40 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
27e50 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
27e60 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
27e70 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
27e80 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
27e90 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
27ea0 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
27eb0 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
27ec0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
27ed0 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
27ee0 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
27ef0 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
27f00 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
27f10 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
27f20 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
27f30 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
27f40 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
27f50 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
27f60 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27f70 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
27f80 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
27f90 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
27fa0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
27fb0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
27fc0 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
27fd0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
27fe0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
27ff0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
28000 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
28010 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
28020 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
28030 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
28040 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
28050 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
28060 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
28070 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
28080 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
28090 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
280a0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
280b0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
280c0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
280d0 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
280e0 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
280f0 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
28100 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
28110 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
28120 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
28130 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
28140 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
28150 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
28160 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
28170 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
28180 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
28190 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
281a0 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
281b0 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
281c0 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
281d0 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
281e0 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
281f0 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
28200 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
28210 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
28220 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
28230 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
28240 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
28250 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
28260 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
28270 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
28280 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
28290 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
282a0 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
282b0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
282c0 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
282d0 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
282e0 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
282f0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
28300 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
28310 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
28320 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
28330 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
28340 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
28350 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
28360 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
28370 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
28380 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
28390 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
283a0 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
283b0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
283c0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
283d0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
283e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
283f0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
28400 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28410 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
28420 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
28430 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
28440 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
28450 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
28460 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28470 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
28480 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
28490 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
284a0 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
284b0 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
284c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
284d0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
284e0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
284f0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
28500 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
28510 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
28520 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
28530 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
28540 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
28550 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
28560 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
28570 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
28580 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
28590 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65   */.../*.** Thre
285a0 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
285b0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
285c0 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
285d0 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
285e0 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
285f0 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
28600 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
28610 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
28620 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
28630 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
28640 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
28650 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
28660 2a 2f 0a                                         */.